Machine.java

1    package model; 
2     
3     
4    import java.util.LinkedList; 
5    import java.util.List; 
6    import java.util.Scanner; 
7     
8    abstract class Machine { 
9        protected List<MenuItem> menu; 
10       protected Dispenser dispenser; 
11       private String name; 
12    
13       Machine(String name) { 
14           this.name = name; 
15           dispenser = new Dispenser(); 
16           menu = new LinkedList<>(); 
17    
18           initialiseIngredients(); 
19           populateMenu(); 
20       } 
21    
22       abstract void initialiseIngredients(); 
23    
24       abstract void populateMenu(); 
25    
26       void run() { 
27           Scanner input = new Scanner(System.in); 
28    
29           while (true) { 
30               System.out.println(""); 
31               System.out.println("----------------------------"); 
32               System.out.println(name); 
33               System.out.println(""); 
34               for(MenuItem b : menu) { 
35                   b.render(); 
36               } 
37               System.out.println(""); 
38               System.out.println("999. Exit"); 
39               System.out.println(""); 
40               System.out.println("Enter your choice"); 
41    
42               int selection = input.nextInt(); 
43               input.nextLine(); 
44    
45               boolean selectionMade = false; 
46    
47               for(MenuItem b : menu) { 
48                   if (b.match(selection)) { 
49                       ((Button)b).press(); 
50                       selectionMade = true; 
51                       break; 
52                   } 
53               } 
54    
55               if (!selectionMade) { 
56                   if (selection == 999) { 
57                       break; 
58                   } else { 
59                       System.out.println("Invalid selection."); 
60                   } 
61               } 
62           } 
63       } 
64   } 
65