1 package at.ac.tuwien.sbc.valesriegler.common;
3 import at.ac.tuwien.sbc.valesriegler.group.gui.GroupCreationDetailsRequest;
4 import at.ac.tuwien.sbc.valesriegler.types.HasOrder;
5 import at.ac.tuwien.sbc.valesriegler.types.Order;
6 import at.ac.tuwien.sbc.valesriegler.types.PizzaOrder;
7 import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
12 import javax.swing.border.TitledBorder;
16 import java.util.List;
18 public abstract class Util {
19 public static final Comparator<HasOrder> HAS_ORDER_COMPARATOR = new Comparator<HasOrder>() {
21 public int compare(HasOrder o1, HasOrder o2) {
22 final int o1Id = o1.getOrder().getId();
23 final int o2Id = o2.getOrder().getId();
40 private static final Logger log = LoggerFactory.getLogger(Util.class);
41 public static boolean useJMS = false;
43 public static final String TABLE_ASSIGNED = "tables";
44 public static final String ASSIGN_TABLE = "assignTable";
45 public static final String TAKE_ORDER = "takeOrder";
46 public static final String ORDER_TAKEN = "order";
47 public static final String DELIVERY_ORDER_TAKEN = "deliverOrderTaken";
48 public static final String DELIVER_PIZZAS = "deliverPizzas";
49 public static final String DELIVER_DELIVERY_PIZZAS = "deliverDeliveryPizzas";
50 public static final String DELIVER_DELIVERY_ORDER = "deliverDeliveryOrderContainer";
51 public static final String PREPARE_PIZZAS = "preparePizzas";
52 public static final String PREPARE_DELIVERY_PIZZAS = "prepareDeliveryPizzas";
53 public static final String PIZZAS_IN_PROGRESS = "pizzasInProgress";
54 public static final String ORDER_COMPLETE = "orderComplete";
55 public static final String PAYMENT_REQUEST = "payment";
56 public static final String FREE_TABLES = "freeTables";
57 public static final String PAYMENT_DONE = "hasPaid";
58 public static final String PIZZERIA_INFO = "pizzeriaInfo";
59 public static final String PHONE_CALLS = "phoneCalls";
60 public static final String GROUP_AGENT_INFO = "groupAgentInfo";
61 public static final String PIZZERIA_GROUP = "pizzeriaGroupContainer";
62 public static final String PIZZERIA_TABLE = "pizzeriaTableContainer";
63 public static final String PIZZERIA_DELIVERY = "pizzeriaDeliveryContainer";
64 public static final String DELIVERY_PROGRESS = "deliveryInProgress";
65 public static final String DELIVERY_DONE = "deliveryDone";
67 public static final boolean runSimulation = false;
69 public static final String NUMBER_DISPLAY_FORMAT = String.format("%%0%dd", 3);
71 private static Random random = new Random();
73 public static final long SPACE_TRANSACTION_TIMEOUT = 1500;
75 public static final String SERVER_ADDR = "xvsm://localhost:%d";
76 public static final int GROUP_AGENT_PORT = 9876;
77 public static final int DELIVERY_CUSTOMERS_PORT = 9877;
79 public static final String JMS_DELIVERY_DESTINATION = "tcp://localhost:61611?jms.prefetchPolicy.all=1";
81 public static String getId(int id) {
82 return (id != 0 && id != -1) ? String.valueOf(id) : "";
85 public static int getIntSafe(Integer nr) {
86 return nr == null ? 0 : nr;
89 public static URI createURI(int port) {
90 return URI.create(String.format(SERVER_ADDR, port));
93 public static <T extends HasId> Map<Integer, T> intoMapById(List<T> hasIds) {
95 return Collections.emptyMap();
98 Map<Integer, T> myMap = new HashMap<>();
99 for (T hasId : hasIds) {
100 myMap.put(hasId.getId(), hasId);
105 public static int getRandom(int min, int max) {
106 return random.nextInt(max - min + 1) + min;
109 public static Tuple<Integer> parseIdAndSpacePort(String[] args, String usage) {
110 if (args.length != 2) {
111 throw new IllegalArgumentException(usage);
117 parsedId = Integer.parseInt(args[0]);
118 port = Integer.parseInt(args[1]);
119 } catch (NumberFormatException e) {
120 throw new IllegalArgumentException(usage);
123 return new Tuple<Integer>(parsedId, port);
126 public static JTable createTableInTitledPanel(JPanel wrapperPanel, TableModel<?> model, String title) {
127 JTable table = new JTable(model);
128 wrapperPanel.setLayout(new GridBagLayout());
129 GridBagConstraints c = new GridBagConstraints();
133 c.insets = new Insets(10, 10, 10, 10);
134 c.fill = GridBagConstraints.BOTH;
135 JScrollPane scrollPane = new JScrollPane(table);
137 wrapperPanel.setBorder(new TitledBorder(title));
138 scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
139 wrapperPanel.add(scrollPane, c);
140 // table.setAutoCreateRowSorter(true);
146 * @return A display string for PizzaTypes.
148 * e.g. Cardinale, Cardinale, Margherita is displayed as "2xCARDINALE,1xMARGHERITA"
150 public static String pizzaDisplay(List<PizzaOrder> list) {
151 HashMap<PizzaType, Integer> pizzaCount = new HashMap<PizzaType, Integer>();
152 for (PizzaOrder pizzaOrder : list) {
153 PizzaType pizzaType = pizzaOrder.getPizzaType();
154 if (pizzaCount.containsKey(pizzaType)) {
155 pizzaCount.put(pizzaType, pizzaCount.get(pizzaType) + 1);
157 pizzaCount.put(pizzaType, 1);
159 Set<PizzaType> pizzaTypes = pizzaCount.keySet();
160 StringBuilder sb = new StringBuilder();
162 boolean multiplePizzas = false;
163 for (PizzaType pizzaType : pizzaTypes) {
167 multiplePizzas = true;
169 sb.append(pizzaCount.get(pizzaType) + "x");
170 sb.append(pizzaType.toString());
173 return sb.toString();
176 public static void handleSpaceErrorAndTerminate(Exception e) {
177 log.error(e.getMessage());
182 public static Order createOrder(HasId group, GroupCreationDetailsRequest gc, boolean isDelivery) {
183 List<PizzaOrder> pizzaOrders = new ArrayList<>();
184 for (PizzaType pt : gc.pizzaTypes) {
185 final PizzaOrder pizzaOrder = new PizzaOrder(pt);
187 pizzaOrder.setDeliveryPizza(true);
189 pizzaOrders.add(pizzaOrder);
191 Order order = new Order(group, pizzaOrders);
192 order.setNumberOfPizzas(order.getOrderedPizzas().size());