@Override public VehicleState getVehicleState(Vehicle vehicle) { return delegate.getVehicleState(vehicle); }
@SuppressWarnings("synthetic-access") @Nullable @Override public DefaultEvent handle(@Nullable StateEvent event, RouteFollowingVehicle context) { if (getPDPModel().getVehicleState(context) == VehicleState.IDLE) { route.remove(); return DefaultEvent.DONE; } return null; } }
@SuppressWarnings("synthetic-access") @Nullable @Override public DefaultEvent handle(@Nullable StateEvent event, RouteFollowingVehicle context) { if (getPDPModel().getVehicleState(context) == VehicleState.IDLE) { route.remove(); return DefaultEvent.DONE; } return null; } }
@SuppressWarnings("synthetic-access") @Override public void onEntry(StateEvent event, RouteFollowingVehicle context) { checkState( getPDPModel().getVehicleState(context) == VehicleState.IDLE, "We can only be in Wait state when the vehicle is idle, " + "vehicle is %s.", getPDPModel().getVehicleState(context)); if (event == DefaultEvent.NOGO) { checkArgument(isDiversionAllowed); } if (context.newRoute.isPresent()) { context.setRoute(context.newRoute.get()); } }
@SuppressWarnings("synthetic-access") @Override public void onEntry(StateEvent event, RouteFollowingVehicle context) { checkState( getPDPModel().getVehicleState(context) == VehicleState.IDLE, "We can only be in Wait state when the vehicle is idle, " + "vehicle is %s.", getPDPModel().getVehicleState(context)); if (event == DefaultEvent.NOGO) { checkArgument(isDiversionAllowed); } if (context.newRoute.isPresent()) { context.setRoute(context.newRoute.get()); } }
@Override public void unclaim(Parcel p) { LOGGER.info("{} unclaim {}", this, p); checkArgument(claimedParcels.contains(p), "Can not unclaim %s because it is not claimed.", p); // check that parcel is still assignable to another bidder checkArgument( // it may be available or announced pdpModel.get().getParcelState(p) == ParcelState.AVAILABLE || pdpModel.get().getParcelState(p) == ParcelState.ANNOUNCED // otherwise, we must make sure that 'our' vehicle is not servicing it // i.e. if our vehicle is idle: || pdpModel.get().getVehicleState(vehicle.get()) == VehicleState.IDLE // or, if our vehicle is not idle, that it is not servicing the parcel // we are trying to get rid of: || pdpModel.get().getVehicleActionInfo(vehicle.get()).getParcel() != p, "%s: Parcel (%s) can not be unclaimed because it is being serviced.", this, p, pdpModel.get().getParcelState(p)); claimedParcels.remove(p); }
boolean isPickingUp(Parcel p) { return getPDPModel().getVehicleState(this) == VehicleState.PICKING_UP && getPDPModel().getVehicleActionInfo(this).getParcel().equals(p); }
route.clear(); } else { LOGGER.info("vehicle {}", pdpModel.get().getVehicleState(vehicle.get())); if (pdpModel.get().getVehicleState(vehicle.get()) != VehicleState.IDLE) { LOGGER.info("parcel {} {}", pdpModel.get().getVehicleActionInfo(vehicle.get()) LOGGER.info("{}", pdpModel.get().getVehicleState(vehicle.get())); dispatchChangeEvent();
boolean isPickingUp(Parcel p) { return getPDPModel().getVehicleState(this) == VehicleState.PICKING_UP && getPDPModel().getVehicleActionInfo(this).getParcel().equals(p); }
@Override public void renderDynamic(GC gc, ViewPort vp, long time) { uiSchema.initialize(gc.getDevice()); final Collection<Parcel> parcels = pdpModel.getParcels( ParcelState.values()); final Image image = uiSchema.getImage(Box.class); checkState(image != null); synchronized (pdpModel) { final Set<Vehicle> vehicles = pdpModel.getVehicles(); final Map<Parcel, Vehicle> mapping = new LinkedHashMap<>(); for (final Vehicle v : vehicles) { for (final Parcel p : pdpModel.getContents(v)) { mapping.put(p, v); } if (pdpModel.getVehicleState(v) != VehicleState.IDLE) { final PDPModel.VehicleParcelActionInfo vpai = pdpModel .getVehicleActionInfo(v); mapping.put(vpai.getParcel(), vpai.getVehicle()); } } for (final Parcel p : parcels) { drawBox(p, gc, vp, time, image, mapping); } } }
@Override public void renderDynamic(GC gc, ViewPort vp, long time) { uiSchema.initialize(gc.getDevice()); final Collection<Parcel> parcels = pdpModel.getParcels( ParcelState.values()); final Image image = uiSchema.getImage(Box.class); checkState(image != null); synchronized (pdpModel) { final Set<Vehicle> vehicles = pdpModel.getVehicles(); final Map<Parcel, Vehicle> mapping = new LinkedHashMap<>(); for (final Vehicle v : vehicles) { for (final Parcel p : pdpModel.getContents(v)) { mapping.put(p, v); } if (pdpModel.getVehicleState(v) != VehicleState.IDLE) { final PDPModel.VehicleParcelActionInfo vpai = pdpModel .getVehicleActionInfo(v); mapping.put(vpai.getParcel(), vpai.getVehicle()); } } for (final Parcel p : parcels) { drawBox(p, gc, vp, time, image, mapping); } } }
ImmutableSet.Builder<Parcel> availableDestBuilder) { final boolean isIdle = pm .getVehicleState(vehicle) == PDPModel.VehicleState.IDLE;
final int y = vp.toCoordY(p.y) + Y_OFFSET; final VehicleState vs = pdpModel.getVehicleState(t);
final int y = vp.toCoordY(p.y) + Y_OFFSET; final VehicleState vs = pdpModel.getVehicleState(t);
/** * Checks whether delayed route changing is rejected if necessary. */ @Test public void setRouteTest4() { d.setRoute(asList(p1, p1)); tick(12, 15); assertEquals(ParcelState.PICKING_UP, pm.getParcelState(p1)); assertEquals(VehicleState.PICKING_UP, pm.getVehicleState(d)); boolean exception = false; try { d.setRoute(asList(p2)); assertEquals(asList(p2), d.newRoute.get()); } catch (final IllegalArgumentException e) { exception = true; } assertThat(exception).isNotSameAs(allowDelayedRouteChanges); }
void tick(long beginMinute, long endMinute, long consumeSeconds) { final TimeLapse tl = time(minute(beginMinute), minute(endMinute)); if (consumeSeconds > 0) { tl.consume(consumeSeconds * 1000); } pm.tick(copy(tl)); final TimeLapse dtl = copy(tl); d.tick(dtl); assertSame(dtl, d.getCurrentTimeLapse()); assertFalse(dtl.hasTimeLeft()); // tests whether internal states of vehicle match the state of the pdp model // at all times if (pm.getVehicleState(d) == VehicleState.DELIVERING || pm.getVehicleState(d) == VehicleState.PICKING_UP) { assertSame(d.serviceState, d.stateMachine.getCurrentState()); } else { assertThat(d.serviceState).isNotSameAs(d.stateMachine.getCurrentState()); } }
void checkVehicles(List<? extends TestVehicle> expected, ImmutableList<VehicleStateObject> states) { assertEquals(expected.size(), states.size()); for (int i = 0; i < expected.size(); i++) { final TestVehicle vehicle = expected.get(i); final VehicleDTO dto = vehicle.dto; final VehicleStateObject vs = states.get(i); assertEquals(dto.getAvailabilityTimeWindow(), vs.getDto().getAvailabilityTimeWindow()); assertEquals(dto.getCapacity(), vs.getDto().getCapacity()); assertEquals(dto.getSpeed(), vs.getDto().getSpeed(), 0); assertEquals(dto.getStartPosition(), vs.getDto().getStartPosition()); assertEquals(rm.getPosition(expected.get(i)), vs.getLocation()); final Parcel dest = rm.getDestinationToParcel(vehicle); if (dest == null) { assertFalse(vs.getDestination().isPresent()); } else { assertEquals(dest, vs.getDestination().get()); } if (pm.getVehicleState(vehicle) == VehicleState.IDLE) { assertEquals(0, vs.getRemainingServiceTime()); } else { assertEquals(pm.getVehicleActionInfo(vehicle).timeNeeded(), vs.getRemainingServiceTime()); } } }
/** * */ @Test public void brokenWaitState() { d.setRoute(asList(p1)); tick(4, 5, 30); assertEquals(d.gotoState, d.stateMachine.getCurrentState()); if (allowDelayedRouteChanges) { d.setRoute(Arrays.<Parcel>asList()); rm.moveTo(d, p1, time(minute(0), minute(10))); assertTrue(rm.equalPosition(d, p1)); pm.pickup(d, p1, time(minute(16), minute(17))); assertEquals(VehicleState.PICKING_UP, pm.getVehicleState(d)); if (diversionIsAllowed) { boolean exception = false; try { tick(5, 6); } catch (final IllegalStateException e) { exception = true; } assertTrue(exception); } } }
@Test(expected = IllegalArgumentException.class) public void testPickupFail3A() { // package not in available state (it is already been picked up) final Vehicle truck = new TestVehicle( VehicleDTO.builder().startPosition(new Point(1, 1)).build()); rm.register(truck); model.register(truck); final Parcel pack1 = Parcel.builder(new Point(0, 0), new Point(2, 2)) .pickupDuration(10) .deliveryDuration(10) .neededCapacity(2d) .build(); rm.register(pack1); model.register(pack1); rm.addObjectAtSamePosition(pack1, truck); assertTrue(rm.equalPosition(truck, pack1)); assertEquals(ParcelState.AVAILABLE, model.getParcelState(pack1)); assertEquals(VehicleState.IDLE, model.getVehicleState(truck)); model.pickup(truck, pack1, TimeLapseFactory.create(0, 100)); assertEquals(ParcelState.IN_CARGO, model.getParcelState(pack1)); assertEquals(VehicleState.IDLE, model.getVehicleState(truck)); // checks what happens when you add a package to the roadmodel which has // already been picked up rm.addObjectAt(pack1, new Point(1, 1)); model.pickup(truck, pack1, TimeLapseFactory.create(0, 100)); }
@Test(expected = IllegalArgumentException.class) public void testDeliverFail2() { final Vehicle truck = new TestVehicle( VehicleDTO.builder().startPosition(new Point(1, 1)).build()); rm.register(truck); model.register(truck); final Parcel pack1 = Parcel.builder(new Point(1, 1), new Point(2, 2)) .pickupDuration(10) .deliveryDuration(10) .neededCapacity(2d) .build(); rm.register(pack1); model.register(pack1); rm.addObjectAtSamePosition(pack1, truck); model.pickup(truck, pack1, TimeLapseFactory.create(0, 1)); assertEquals(VehicleState.PICKING_UP, model.getVehicleState(truck)); model.deliver(truck, pack1, TimeLapseFactory.create(0, 1)); }