import org.slf4j.LoggerFactory;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
public class DeliveryOverviewModel extends TableModel<DeliveryGroup> {
}
fireTableDataChanged();
}
+
+ public void createStatistics() {
+ int size;
+ int finished;
+ synchronized (items) {
+ final Collection<DeliveryGroup> values = items.values();
+ size = values.size();
+ finished = 0;
+ for (DeliveryGroup group : values) {
+ final DeliveryStatus status = group.getDeliveryGroupData().getDeliveryStatus();
+ if (status == DeliveryStatus.DELIVERED || status == DeliveryStatus.DELIVERY_FAILED) {
+ finished++;
+ }
+ }
+ }
+ log.info("{} deliveries were ordered", size);
+ log.info("{} were finished", finished);
+ }
}
import at.ac.tuwien.sbc.valesriegler.common.Util;
import at.ac.tuwien.sbc.valesriegler.types.*;
import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
-import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceListener;
import org.mozartspaces.core.MzsConstants.RequestTimeout;
import org.mozartspaces.core.MzsCoreException;
import org.mozartspaces.core.TransactionReference;
}
public void listenForDeliveryPizzas() {
- SpaceListener pizzasListener = getDefaultBuilder().setLookaround(true).setCref(prepareDeliveryPizzasContainer).setTimeout(15000).setSpaceAction(new SpaceAction() {
+ getDefaultBuilder().setLookaround(true).setCref(prepareDeliveryPizzasContainer).setTimeout(15000).setSpaceAction(new SpaceAction() {
@Override
public void onEntriesWritten(List<? extends Serializable> entries)
List<PizzaOrder> pizzas = castEntries(entries);
- if (inNotification.get() || Util.runSimulation) Collections.shuffle(pizzas);
+ if (inNotification.get()) Collections.shuffle(pizzas);
for (PizzaOrder pizzaOrder : pizzas) {
import at.ac.tuwien.sbc.valesriegler.common.Util;
import at.ac.tuwien.sbc.valesriegler.types.DeliveryGroupData;
import at.ac.tuwien.sbc.valesriegler.types.DeliveryStatus;
+import at.ac.tuwien.sbc.valesriegler.types.Order;
+import at.ac.tuwien.sbc.valesriegler.types.Pizza;
import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
-import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceListener;
import org.mozartspaces.core.ContainerReference;
import org.mozartspaces.core.MzsConstants;
import org.mozartspaces.core.TransactionReference;
this.driverId = id;
- this.preparedDeliveryPizzasContainer = useContainer(Util.DELIVER_DELIVERY_PIZZAS);
- this.deliveryOrderTakenContainer = useContainer(Util.DELIVERY_ORDER_TAKEN);
- this.deliverDeliveryOrderContainer = useContainer(Util.DELIVER_DELIVERY_ORDER);
+ preparedDeliveryPizzasContainer = useContainer(Util.DELIVER_DELIVERY_PIZZAS);
+ deliveryOrderTakenContainer = useContainer(Util.DELIVERY_ORDER_TAKEN);
+ deliverDeliveryOrderContainer = useContainer(Util.DELIVER_DELIVERY_ORDER);
pizzeriaDeliveryContainer = useContainer(Util.PIZZERIA_DELIVERY);
- deliveryDone = useContainer(Util.DELIVERY_DONE);
- deliveryInProgress = useContainer(Util.DELIVERY_PROGRESS);
+
}
public void listenForPreparedDeliveryOrders() {
- SpaceListener orderListener = getDefaultBuilder().setCref(deliverDeliveryOrderContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
+ getDefaultBuilder().setCref(deliverDeliveryOrderContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
@Override
public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
try {
// Get lock for delivering this delivery order
- takeMatchingEntity(template, deliverDeliveryOrderContainer, tx, MzsConstants.RequestTimeout.DEFAULT, error);
+ final DeliveryGroupData deliveryGroup = takeMatchingEntity(template, deliverDeliveryOrderContainer, tx, MzsConstants.RequestTimeout.DEFAULT, error);
final DeliveryGroupData group = takeMatchingEntity(template, pizzeriaDeliveryContainer, tx, MzsConstants.RequestTimeout.INFINITE, "Cannot get the delivery order!");
group.setDriverId(driverId);
group.setDeliveryStatus(DeliveryStatus.IN_PROGRESS);
final List<DeliveryGroupData> groups = Arrays.asList(group);
- sendItemsToContainer(groups,
- deliveryInProgress, MzsConstants.RequestTimeout.ZERO, null);
- sendItemsToContainer(groups,
- pizzeriaDeliveryContainer, MzsConstants.RequestTimeout.ZERO, null);
+// sendItemsToContainer(groups,
+// pizzeriaDeliveryContainer, MzsConstants.RequestTimeout.ZERO, null);
- if (! Util.runSimulation) {
+ if (!Util.runSimulation) {
Thread.sleep(3000);
}
}
if (success) {
group.setDeliveryStatus(DeliveryStatus.DELIVERED);
- sendItemsToContainer(Arrays.asList(new Bill(1000, group.getId())), cref, MzsConstants.RequestTimeout.DEFAULT, null);
+ if (!Util.runSimulation) {
+ sendItemsToContainer(Arrays.asList(new Bill(1000, group.getId())), cref, MzsConstants.RequestTimeout.DEFAULT, null);
+ }
} else {
group.setDeliveryStatus(DeliveryStatus.DELIVERY_FAILED);
}
- sendItemsToContainer(groups, deliveryDone, MzsConstants.RequestTimeout.DEFAULT, tx);
sendItemsToContainer(groups, pizzeriaDeliveryContainer, MzsConstants.RequestTimeout.DEFAULT, tx);
capi.commitTransaction(tx);
}
}).createSpaceListenerImpl();
}
+
+ public void listenForPreparedDeliveryPizzas() {
+ getDefaultBuilder().setCref(preparedDeliveryPizzasContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
+
+ @Override
+ public void onEntriesWritten(List<? extends Serializable> entries)
+ throws Exception {
+
+ List<Pizza> pizzas = castEntries(entries);
+
+ for (Pizza pizza : pizzas) {
+ int orderId = pizza.getOrderId();
+ Order order = new Order();
+ order.setId(orderId);
+
+ TransactionReference tx = getDefaultTransaction();
+
+ try {
+ DeliveryGroupData entity = new DeliveryGroupData();
+ entity.setDeliveryStatus(null);
+ entity.setOrder(order);
+
+ final DeliveryGroupData groupData = takeMatchingEntity(entity,
+ deliveryOrderTakenContainer, tx, MzsConstants.RequestTimeout.DEFAULT,
+ "Another driver just checks if the delivery order is complete");
+ int numberOfPizzas = groupData.getOrder().getNumberOfPizzas();
+
+ Pizza pizzaTemplate = new Pizza();
+ pizzaTemplate.setOrderId(orderId);
+
+ List<Pizza> pizzasOfOrder = takeMatchingEntities(
+ pizzaTemplate, preparedDeliveryPizzasContainer, tx,
+ MzsConstants.RequestTimeout.DEFAULT,
+ "Cannot take the pizzas from the preparedDeliveryPizzasContainer");
+
+ if (pizzasOfOrder.size() == numberOfPizzas) {
+ final List<DeliveryGroupData> groupsWithCompleteOrder = Arrays.asList(groupData);
+ sendItemsToContainer(groupsWithCompleteOrder,
+ deliverDeliveryOrderContainer, MzsConstants.RequestTimeout.DEFAULT,
+ tx);
+
+ capi.commitTransaction(tx);
+ } else {
+ log.info("Not yet all pizzas prepared! Order with id "
+ + orderId + " has " + numberOfPizzas
+ + " pizzas, but only " + pizzasOfOrder.size()
+ + " pizzas are ready by now!");
+ capi.rollbackTransaction(tx);
+ }
+ } catch (NullPointerException e) {
+
+ } catch (Exception e) {
+ capi.rollbackTransaction(tx);
+ }
+ }
+ }
+ }).createSpaceListenerImpl();
+ }
}
List<PizzaType> pizzaTypes2 = Arrays.asList(PizzaType.CARDINALE, PizzaType.SALAMI, PizzaType.MARGHERITA);
List<PizzaType> pizzaTypes3 = Arrays.asList(PizzaType.SALAMI, PizzaType.MARGHERITA);
- final String pizzeria1 = "9875";
- final String pizzeria2 = "9874";
+ final String pizzeria1 = "9874";
+ final String pizzeria2 = "9875";
List<DeliveryGroup> groups1 = GroupAgent.getInstance().createGroups(pizzaTypes1, pizzeria1, 4);
List<DeliveryGroup> groups2 = GroupAgent.getInstance().createGroups(pizzaTypes2, pizzeria2, 3);
List<DeliveryGroup> groups3 = GroupAgent.getInstance().createGroups(pizzaTypes3, pizzeria2, 2);
log.info("ATTENTION: It's all over now!");
notificationMgr.shutdown();
-// System.exit(1);
+ deliveryModel.createStatistics();
}
}).start();
}
}
public void listenForPhoneOrders() {
- SpaceListener phoneListener = getDefaultBuilder().setCref(phoneCallsContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
+ getDefaultBuilder().setCref(phoneCallsContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
@Override
public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
final List<DeliveryGroupData> phoneOrders = castEntries(entries);
+// if(inNotification.get()) Collections.shuffle(phoneOrders);
+
for (DeliveryGroupData phoneOrder : phoneOrders) {
final int id = phoneOrder.getId();
final DeliveryGroupData template = new DeliveryGroupData(id);
}).createSpaceListenerImpl();
}
- public void listenForPreparedDeliveryPizzas() {
- /**
- * A waiter gets informed when a new pizza is complete. He takes the
- * orderId of the pizza and looks up the corresponding order from which
- * he gets the number of necessary pizzas of the order. He then tries to
- * fetch all pizzas with the corresponding orderId and compares the
- * number of those pizzas with the number of necessary pizzas. If all
- * pizzas of an order are complete he then delivers them!
- */
- getDefaultBuilder().setCref(preparedDeliveryPizzasContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
-
- @Override
- public void onEntriesWritten(List<? extends Serializable> entries)
- throws Exception {
-
- List<Pizza> pizzas = castEntries(entries);
-
- for (Pizza pizza : pizzas) {
- int orderId = pizza.getOrderId();
- Order order = new Order();
- order.setId(orderId);
-
- TransactionReference tx = getDefaultTransaction();
-
- try {
- DeliveryGroupData entity = new DeliveryGroupData();
- entity.setDeliveryStatus(null);
- entity.setOrder(order);
-
- takeMatchingEntity(entity,
- deliveryOrderTakenContainer, tx, RequestTimeout.DEFAULT,
- "Another driver just checks if the delivery order is complete");
- DeliveryGroupData groupData = takeMatchingEntity(entity,
- pizzeriaDeliveryContainer, tx, RequestTimeout.INFINITE,
- "Waiter cannot take the delivery order from Space!");
- int groupId = groupData.getId();
- int numberOfPizzas = groupData.getOrder().getNumberOfPizzas();
-
- Pizza pizzaTemplate = new Pizza();
- pizzaTemplate.setOrderId(orderId);
-
- List<Pizza> pizzasOfOrder = takeMatchingEntities(
- pizzaTemplate, preparedDeliveryPizzasContainer, tx,
- RequestTimeout.DEFAULT,
- "Cannot take the pizzas from the preparedDeliveryPizzasContainer");
-
- if (pizzasOfOrder.size() == numberOfPizzas) {
- final List<DeliveryGroupData> groupsWithCompleteOrder = Arrays.asList(groupData);
- sendItemsToContainer(groupsWithCompleteOrder,
- deliverDeliveryOrderContainer, RequestTimeout.DEFAULT,
- tx);
- sendItemsToContainer(groupsWithCompleteOrder,
- pizzeriaDeliveryContainer, RequestTimeout.DEFAULT,
- tx);
-
- capi.commitTransaction(tx);
- } else {
- log.info("Not yet all pizzas prepared! Order with id "
- + orderId + " has " + numberOfPizzas
- + " pizzas, but only " + pizzasOfOrder.size()
- + " pizzas are ready by now!");
- capi.rollbackTransaction(tx);
- }
- } catch (NullPointerException e) {
-
- } catch (Exception e) {
- capi.rollbackTransaction(tx);
- }
- }
- }
- }).createSpaceListenerImpl();
- }
-
-
private void assignGroupToTable(GroupData lockedGroup,
Table lockedFreeTable, TransactionReference tx)
throws MzsCoreException {
private void start() {
xvsm = new DriverXVSM(id, port);
xvsm.listenForPreparedDeliveryOrders();
+ xvsm.listenForPreparedDeliveryPizzas();
}
public Driver(int id, int port) {
package at.ac.tuwien.sbc.valesriegler.xvsm.waiter;
-import java.io.Serializable;
-
import at.ac.tuwien.sbc.valesriegler.common.Tuple;
import at.ac.tuwien.sbc.valesriegler.common.Util;
+import at.ac.tuwien.sbc.valesriegler.xvsm.WaiterXVSM;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import at.ac.tuwien.sbc.valesriegler.xvsm.WaiterXVSM;
+import java.io.Serializable;
/**
* This is a waiter using XVSM
xvsm.listenForFreeTable();
xvsm.listenForPhoneOrders();
-
- xvsm.listenForPreparedDeliveryPizzas();
}