1 package at.ac.tuwien.sbc.valesriegler.group.gui;
3 import at.ac.tuwien.sbc.valesriegler.common.HasId;
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 at.ac.tuwien.sbc.valesriegler.types.PizzaOrder;
9 import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
12 import java.util.ArrayList;
13 import java.util.List;
16 * Handles the Wizard-like creation of groups.
18 * Give an instance of this class as a callback to the Panel from which a
19 * group creation request should be issued
21 class GroupCreationHandler {
22 private final boolean createDeliveryGroups;
23 private JPanel creationPanel;
24 private JPanel chooseGroupSizePanel;
25 private JPanel groupCreationPanel;
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;
34 public void showGroupCreationDetailPanel() {
35 chooseGroupSizePanel.setVisible(false);
36 creationPanel.add(groupCreationPanel);
39 public void handleGroupCreation(GroupCreationDetailsRequest gc) {
40 chooseGroupSizePanel.setVisible(true);
41 creationPanel.remove(groupCreationPanel);
42 creationPanel.repaint();
46 public void createGroups(GroupCreationDetailsRequest gc) {
47 List<DeliveryGroup> newDeliveryGroups = new ArrayList<>();
48 List<Group> newNormalGroups = new ArrayList<>();
50 for (int i = 0; i < gc.numberOfGroups; i++) {
51 if(createDeliveryGroups) {
52 DeliveryGroup group = new DeliveryGroup();
53 final Order order = createOrder(group, gc);
54 group.getDeliveryGroupData().setOrder(order);
55 group.getDeliveryGroupData().setPizzeriaId(gc.pizzeria);
56 newDeliveryGroups.add(group);
58 Group group = new Group();
59 final Order order = createOrder(group, gc);
60 group.getGroupData().setOrder(order);
61 group.getGroupData().setSize(gc.size);
62 group.getGroupData().setPizzeriaId(gc.pizzeria);
63 newNormalGroups.add(group);
66 if(createDeliveryGroups) {
67 DeliveryOverviewModel deliveryOverviewModel = GroupAgent.getInstance().getDeliveryModel();
68 deliveryOverviewModel.addItems(newDeliveryGroups);
69 GroupAgent.getInstance().onDeliveryGroupsCreated(newDeliveryGroups);
71 GroupOverviewModel groupModel = GroupAgent.getInstance().getGroupModel();
72 groupModel.addItems(newNormalGroups);
73 GroupAgent.getInstance().onGroupsCreated(newNormalGroups);
77 private Order createOrder(HasId group, GroupCreationDetailsRequest gc) {
78 List<PizzaOrder> pizzaOrders = new ArrayList<>();
79 for (PizzaType pt : gc.pizzaTypes) {
80 final PizzaOrder pizzaOrder = new PizzaOrder(pt);
81 pizzaOrder.setDeliveryPizza(createDeliveryGroups);
82 pizzaOrders.add(pizzaOrder);
84 Order order = new Order(group, pizzaOrders);
85 order.setNumberOfPizzas(order.getOrderedPizzas().size());
90 public void handleCancel() {
91 chooseGroupSizePanel.setVisible(true);
92 creationPanel.remove(groupCreationPanel);
93 creationPanel.repaint();