/** * The actual delivery of the specified {@link Parcel} by the specified * {@link Vehicle}. * * @param vehicle The {@link Vehicle} that performs the delivery. * @param parcel The {@link Parcel} that is delivered. * @param time The current time. */ protected void doDeliver(Vehicle vehicle, Parcel parcel, long time) { synchronized (this) { containerContents.remove(vehicle, parcel); containerContentsSize.put(vehicle, containerContentsSize.get(vehicle) - parcel.getNeededCapacity()); parcelState.put(ParcelState.DELIVERED, parcel); LOGGER.info("{} end delivery of {} by {}", time, parcel, vehicle); eventDispatcher.dispatchEvent(new PDPModelEvent( PDPModelEventType.END_DELIVERY, self, time, parcel, vehicle)); } }
@Override public void addParcelIn(Container container, Parcel parcel) { synchronized (this) { /* 1 */checkArgument(!roadModel.containsObject(parcel), "this parcel is already added to the roadmodel"); /* 2 */checkArgument( parcelState.getKeys(parcel) == ParcelState.AVAILABLE, "parcel must be registered and in AVAILABLE state, current state: %s", parcelState.getKeys(parcel)); /* 3 */checkArgument(containerCapacities.containsKey(container), "the parcel container is not registered"); /* 4 */checkArgument(roadModel.containsObject(container), "the parcel container is not on the roadmodel"); final double newSize = containerContentsSize.get(container) + parcel.getNeededCapacity(); /* 5 */checkArgument( newSize <= containerCapacities.get(container), "parcel does not fit in container. Capacity is %s, current content " + "size is %s, new parcel size is %s", containerCapacities.get(container), containerContentsSize.get(container), parcel.getNeededCapacity()); containerContents.put(container, parcel); containerContentsSize.put(container, newSize); parcelState.put(ParcelState.IN_CARGO, parcel); } }
/** * Actual pickup, updates the {@link Vehicle} contents. * * @param vehicle The {@link Vehicle} that performs the pickup. * @param parcel The {@link Parcel} that is picked up. * @param time The current time. * @see #pickup(Vehicle, Parcel, TimeLapse) */ protected void doPickup(Vehicle vehicle, Parcel parcel, long time) { synchronized (this) { containerContents.put(vehicle, parcel); containerContentsSize.put(vehicle, containerContentsSize.get(vehicle) + parcel.getNeededCapacity()); parcelState.put(ParcelState.IN_CARGO, parcel); LOGGER.info("{} end pickup of {} by {}", time, parcel, vehicle); eventDispatcher.dispatchEvent(new PDPModelEvent( PDPModelEventType.END_PICKUP, self, time, parcel, vehicle)); } }
/** * The actual dropping of the specified {@link Parcel} by the specified * {@link Vehicle}. * * @param vehicle The {@link Vehicle} that performs the dropping. * @param parcel The {@link Parcel} that is dropped. * @param time The current time. */ protected void doDrop(Vehicle vehicle, Parcel parcel, long time) { synchronized (this) { containerContents.remove(vehicle, parcel); containerContentsSize.put(vehicle, containerContentsSize.get(vehicle) - parcel.getNeededCapacity()); roadModel.addObjectAtSamePosition(parcel, vehicle); parcelState.put(ParcelState.AVAILABLE, parcel); LOGGER.info("{} dropped {} by {}", time, parcel, vehicle); eventDispatcher.dispatchEvent(new PDPModelEvent( PDPModelEventType.PARCEL_AVAILABLE, self, time, parcel, null)); } }
+ "pickup"); final double newSize = containerContentsSize.get(vehicle) + parcel.getNeededCapacity(); parcel.getNeededCapacity(), containerContentsSize.get(vehicle), containerCapacities.get(vehicle));
time.getTime(), closest.getPickupDuration())) { final double newSize = getPDPModel().getContentsSize(this) + closest.getNeededCapacity();
time.getTime(), closest.getPickupDuration())) { final double newSize = getPDPModel().getContentsSize(this) + closest.getNeededCapacity();