
//================================================================
//  the app... the code using the pattern structured part
//================================================================

public class App {
  public static void main(String[] args) {
  
    BallotFactory bfac = BallotFactory.makeTheOne();
        
    Ballot b1 = (Ballot)bfac.genBallot("inner","Federal");
    Ballot b2 = (Ballot)bfac.genBallot("inner","State");
    Ballot b3 = (Ballot)bfac.genBallot("inner","Local");
    
    Issue f1 = (Issue)bfac.genBallot("leaf","Ben for US Senate");
    Issue f2 = (Issue)bfac.genBallot("leaf","Arlene for President");
    Issue f3 = (Issue)bfac.genBallot("leaf","Jim for US House");  
    b1.add(f1);
    b1.add(f2);
    b1.add(f3);
    
    Issue s1 = (Issue)bfac.genBallot("leaf","fishing limit 3 a day");
    Issue s2 = (Issue)bfac.genBallot("leaf","speed limit set to 55mph");
    b1.add(b2);
    b2.add(s1);
    b2.add(s2);
    
    Issue l1 = (Issue)bfac.genBallot("leaf","cell tower height limits");
    Issue l2 = (Issue)bfac.genBallot("leaf","bob for dog catcher");
    Issue l3 = (Issue)bfac.genBallot("leaf","school bond $2M");
    b3.add(l1);
    b3.add(l2);
    b3.add(l3);
    b1.add(b3);
    
    System.out.println("doing the vote");
    b1.doVote();
    
    System.out.println("\nreporting the vote");
    b1.tellVote(0);
    
    TallyProcessor P = TallyProcessor.setUpChain(3);
    P.handle(b1,0,false);
    P.handle(b1,0,false);
    P.PrintVote();
    P.next.PrintVote();
    P.next.next.PrintVote();
    
    //b2.reportVote();
  }
}