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;
10 import org.slf4j.LoggerFactory;
13 import java.util.ArrayList;
14 import java.util.List;
17 * Handles the Wizard-like creation of groups.
19 * Give an instance of this class as a callback to the Panel from which a
20 * group creation request should be issued
22 class GroupCreationHandler {
23 private static final org.slf4j.Logger log = LoggerFactory.getLogger(GroupCreationHandler.class);
24 private final boolean createDeliveryGroups;
25 private JPanel creationPanel;
26 private JPanel chooseGroupSizePanel;
27 private JPanel groupCreationPanel;
29 public GroupCreationHandler(JPanel creationPanel, JPanel chooseGroupSizePanel, JPanel groupCreationPanel, boolean createDeliveryGroups) {
30 this.createDeliveryGroups = createDeliveryGroups;
31 this.creationPanel = creationPanel;
32 this.chooseGroupSizePanel = chooseGroupSizePanel;
33 this.groupCreationPanel = groupCreationPanel;
36 public void showGroupCreationDetailPanel() {
37 chooseGroupSizePanel.setVisible(false);
38 creationPanel.add(groupCreationPanel);
41 public void handleGroupCreation(GroupCreationDetailsRequest gc) {
42 chooseGroupSizePanel.setVisible(true);
43 creationPanel.remove(groupCreationPanel);
44 creationPanel.repaint();
48 public void createGroups(GroupCreationDetailsRequest gc) {
49 List<DeliveryGroup> newDeliveryGroups = new ArrayList<>();
50 List<Group> newNormalGroups = new ArrayList<>();
52 for (int i = 0; i < gc.numberOfGroups; i++) {
53 if(createDeliveryGroups) {
54 DeliveryGroup group = new DeliveryGroup();
55 final Order order = createOrder(group, gc);
56 group.getDeliveryGroupData().setOrder(order);
57 group.getDeliveryGroupData().setPizzeriaId(gc.pizzeria);
58 group.getDeliveryGroupData().setAddress(gc.address);
59 newDeliveryGroups.add(group);
61 Group group = new Group();
62 final Order order = createOrder(group, gc);
63 group.getGroupData().setOrder(order);
64 group.getGroupData().setSize(gc.size);
65 group.getGroupData().setPizzeriaId(gc.pizzeria);
66 newNormalGroups.add(group);
69 if(createDeliveryGroups) {
70 DeliveryOverviewModel deliveryOverviewModel = GroupAgent.getInstance().getDeliveryModel();
71 deliveryOverviewModel.addItems(newDeliveryGroups);
72 GroupAgent.getInstance().onDeliveryGroupsCreated(newDeliveryGroups);
74 GroupOverviewModel groupModel = GroupAgent.getInstance().getGroupModel();
75 groupModel.addItems(newNormalGroups);
76 GroupAgent.getInstance().onGroupsCreated(newNormalGroups);
80 private Order createOrder(HasId group, GroupCreationDetailsRequest gc) {
81 List<PizzaOrder> pizzaOrders = new ArrayList<>();
82 for (PizzaType pt : gc.pizzaTypes) {
83 final PizzaOrder pizzaOrder = new PizzaOrder(pt);
84 // pizzaOrder.setDeliveryPizza(createDeliveryGroups);
85 pizzaOrders.add(pizzaOrder);
87 Order order = new Order(group, pizzaOrders);
88 order.setNumberOfPizzas(order.getOrderedPizzas().size());
93 public void handleCancel() {
94 chooseGroupSizePanel.setVisible(true);
95 creationPanel.remove(groupCreationPanel);
96 creationPanel.repaint();