]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupCreationHandler.java
GUI fix for Tables OutOfBoundsException
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / gui / GroupCreationHandler.java
1 package at.ac.tuwien.sbc.valesriegler.group.gui;
2
3 import at.ac.tuwien.sbc.valesriegler.common.Util;
4 import at.ac.tuwien.sbc.valesriegler.group.DeliveryGroup;
5 import at.ac.tuwien.sbc.valesriegler.group.Group;
6 import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
7 import at.ac.tuwien.sbc.valesriegler.types.Order;
8 import org.slf4j.LoggerFactory;
9
10 import javax.swing.*;
11 import java.util.ArrayList;
12 import java.util.List;
13
14 /**
15  * Handles the Wizard-like creation of groups.
16  * <p />
17  * Give an instance of this class as a callback to the Panel from which a
18  * group creation request should be issued
19  */
20 class GroupCreationHandler {
21     private static final org.slf4j.Logger log = LoggerFactory.getLogger(GroupCreationHandler.class);
22     private final boolean createDeliveryGroups;
23     private JPanel creationPanel;
24     private JPanel chooseGroupSizePanel;
25     private JPanel groupCreationPanel;
26
27     public GroupCreationHandler(JPanel creationPanel, JPanel chooseGroupSizePanel, JPanel groupCreationPanel, boolean createDeliveryGroups) {
28         this.createDeliveryGroups = createDeliveryGroups;
29         this.creationPanel = creationPanel;
30         this.chooseGroupSizePanel = chooseGroupSizePanel;
31         this.groupCreationPanel = groupCreationPanel;
32     }
33
34     public void showGroupCreationDetailPanel() {
35         chooseGroupSizePanel.setVisible(false);
36         creationPanel.add(groupCreationPanel);
37     }
38
39     public void handleGroupCreation(GroupCreationDetailsRequest gc) {
40         chooseGroupSizePanel.setVisible(true);
41         creationPanel.remove(groupCreationPanel);
42         creationPanel.repaint();
43         createGroups(gc);
44     }
45
46     public void createGroups(GroupCreationDetailsRequest gc) {
47         List<DeliveryGroup> newDeliveryGroups = new ArrayList<>();
48         List<Group> newNormalGroups = new ArrayList<>();
49
50         for (int i = 0; i < gc.numberOfGroups; i++) {
51             if(createDeliveryGroups) {
52                 DeliveryGroup group = new DeliveryGroup();
53                 final Order order = Util.createOrder(group, gc, true);
54                 group.getDeliveryGroupData().setOrder(order);
55                 group.getDeliveryGroupData().setPizzeriaId(gc.pizzeria);
56                 group.getDeliveryGroupData().setAddress(gc.address);
57                 newDeliveryGroups.add(group);
58             } else {
59                 Group group = new Group();
60                 final Order order = Util.createOrder(group, gc, false);
61                 group.getGroupData().setOrder(order);
62                 group.getGroupData().setSize(gc.size);
63                 group.getGroupData().setPizzeriaId(gc.pizzeria);
64                 newNormalGroups.add(group);
65             }
66         }
67         if(createDeliveryGroups) {
68             DeliveryOverviewModel deliveryOverviewModel = GroupAgent.getInstance().getDeliveryModel();
69             deliveryOverviewModel.addItems(newDeliveryGroups);
70             GroupAgent.getInstance().onDeliveryGroupsCreated(newDeliveryGroups);
71         } else {
72             GroupOverviewModel groupModel = GroupAgent.getInstance().getGroupModel();
73             groupModel.addItems(newNormalGroups);
74             GroupAgent.getInstance().onGroupsCreated(newNormalGroups);
75         }
76     }
77
78     public void handleCancel() {
79         chooseGroupSizePanel.setVisible(true);
80         creationPanel.remove(groupCreationPanel);
81         creationPanel.repaint();
82     }
83 }