]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupCreationDetailsPanel.java
Add wizard for creating delivery groups to GroupFrame
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / gui / GroupCreationDetailsPanel.java
1 package at.ac.tuwien.sbc.valesriegler.group.gui;
2
3 import java.awt.GridLayout;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.util.ArrayList;
7 import java.util.List;
8
9 import javax.swing.*;
10
11 import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
12 import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
13
14 /**
15  * Panel which allows the selection of pizzas and the number of groups to create
16  * <p />
17  * Features a Create- and Cancel-Button which call the respective methods of the 
18  * {@link GroupCreationHandler} set by {@link #setCreateAndCancelHandler(GroupCreationHandler)}
19  * 
20  * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
21  *
22  */
23 @SuppressWarnings("serial")
24 public class GroupCreationDetailsPanel extends JPanel {
25         
26         private GroupCreationHandler handler;
27         private int numberMembers;
28         private JSpinner numberOfGroupsSpinner;
29         private List<JComboBox> combos = new ArrayList<JComboBox>();
30     private JTextField addressField = new JTextField();
31
32     public GroupCreationDetailsPanel(int numberMembers, boolean withAddressField) {
33                 this.numberMembers = numberMembers;
34                 
35                 GridLayout layout = new GridLayout(0, 2);
36                 setLayout(layout);
37                 
38                 for(int i=1; i<=numberMembers; i++) {
39                         JLabel memberLabel = new JLabel(i + ". Person");
40                         JComboBox pizzaDropdown = new JComboBox();
41                         combos.add(pizzaDropdown);
42                         for(PizzaType type : PizzaType.values()) {
43                                 pizzaDropdown.addItem(type);
44                         }
45                         this.add(memberLabel);
46                         this.add(pizzaDropdown);
47                 }
48                 JLabel numberOfGroupsLabel = new JLabel("Number of groups to create: ");
49                 SpinnerNumberModel model = new SpinnerNumberModel(1,1,100,1);
50             numberOfGroupsSpinner = new JSpinner(model);
51             
52             this.add(numberOfGroupsLabel);
53             this.add(numberOfGroupsSpinner);
54
55         final JLabel pizzeriaLabel = new JLabel("Pizzeria: ");
56         final JComboBox pizzeriaDropdown = new JComboBox();
57
58         final List<String> pizzeriaIdentifiers = GroupAgent.getInstance().getPizzeriaIdentifiers();
59         for (String pizzeriaIdentifier : pizzeriaIdentifiers) {
60             pizzeriaDropdown.addItem(pizzeriaIdentifier);
61         }
62
63         this.add(pizzeriaLabel);
64         this.add(pizzeriaDropdown);
65
66         if(withAddressField) {
67             final JLabel addressLabel = new JLabel("Address: ");
68             this.add(addressLabel);
69             this.add(addressField);
70         }
71
72         JButton create = new JButton("Create");
73             JButton cancel = new JButton("Cancel");
74             
75             this.add(create);
76             this.add(cancel);
77
78             addCreateHandler(create);
79             addCancelHandler(cancel);
80         }
81
82
83         private void addCancelHandler(JButton cancel) {
84                 cancel.addActionListener(new ActionListener() {
85                         
86                         @Override
87                         public void actionPerformed(ActionEvent e) {
88                                 handler.handleCancel();
89                         }
90                 });
91         }
92
93         private void addCreateHandler(JButton create) {
94                 create.addActionListener(new ActionListener() {
95                         
96                         @Override
97                         public void actionPerformed(ActionEvent e) {
98                                 List<PizzaType> types = new ArrayList<>();
99                                 for(JComboBox combo : combos) {
100                                         types.add((PizzaType) combo.getSelectedItem());
101                                 }
102                                 GroupCreationDetailsRequest gcr = new GroupCreationDetailsRequest(numberMembers, (int) numberOfGroupsSpinner.getValue(), types, addressField.getText());
103                                 handler.handleGroupCreation(gcr);
104                         }
105                 });
106         }
107
108         public void setCreateAndCancelHandler(
109                         GroupCreationHandler groupCreationCallback) {
110                 this.handler = groupCreationCallback;
111         }
112
113 }