@Override public ListenableGraph<?> getGraph() { return dgrm.getGraph(); }
@Override public void addObjectAt(RoadUser newObj, Point pos) { if (newObj instanceof MovingRoadUser) { checkArgument( !occupiedNodes.containsValue(pos), "A MovingRoadUser can not be added on an already occupied position " + "%s.", pos); occupiedNodes.put((MovingRoadUser) newObj, pos); } super.addObjectAt(newObj, pos); }
@Override public ImmutableSet<RoadUser> getRoadUsersOn(Point from, Point to) { return dgrm.getRoadUsersOn(from, to); }
final MovingRoadUser car3 = new TestRoadUser(); model.addObjectAt(car1, SW); assertTrue(model.hasRoadUserOn(SW, SE)); model.addObjectAtSamePosition(car2, car1); assertTrue(model.hasRoadUserOn(SW, SE)); model.removeObject(car1); assertTrue(model.hasRoadUserOn(SW, SE)); model.moveTo(car2, NW, hour(1)); assertFalse(model.hasRoadUserOn(SW, SE)); assertTrue(model.hasRoadUserOn(SW, NW)); model.addObjectAtSamePosition(car3, car2); model.moveTo(car2, NE, hour(10)); assertTrue(model.hasRoadUserOn(SW, NW)); assertTrue(model.hasRoadUserOn(NW, NE)); model.clear(); assertFalse(model.hasRoadUserOn(SW, NW)); assertFalse(model.hasRoadUserOn(NW, NE));
public void testIsOccupied() { final MovingRoadUser car = new TestRoadUser(); model.addObjectAt(car, SW); assertThat(model.hasRoadUserOn(SW, NW)).isTrue(); assertThat(model.getRoadUsersOn(SW, NW)).containsExactly(car); assertThat(model.hasRoadUserOn(NW, SW)).isTrue(); assertThat(model.getRoadUsersOn(NW, SW)).containsExactly(car); assertThat(model.hasRoadUserOn(SW, SE)).isTrue(); assertThat(model.getRoadUsersOn(SW, SE)).containsExactly(car); assertThat(model.hasRoadUserOn(SE, SW)).isTrue(); assertThat(model.getRoadUsersOn(SE, SW)).containsExactly(car); assertThat(model.hasRoadUserOn(NE, SE)).isFalse(); assertThat(model.getRoadUsersOn(NE, SE)).isEmpty(); model.hasRoadUserOn(SW, NE); } catch (final IllegalArgumentException e) { fail = true; model.moveTo(car, NW, hour(1)); assertThat(model.hasRoadUserOn(SW, NW)).isTrue(); assertThat(model.getRoadUsersOn(SW, NW)).containsExactly(car); assertThat(model.hasRoadUserOn(NW, SW)).isFalse(); assertThat(model.getRoadUsersOn(NW, SW)).isEmpty();
/** * Tests the removal of a connection which was previously occupied. */ @Test public void testRemovePrevOccupiedCon() { final MovingRoadUser user = new TestRoadUser(); model.addObjectAt(user, SW); model.moveTo(user, NW, hour(1)); assertTrue(model.hasRoadUserOn(SW, NW)); model.moveTo(user, NE, hour(10)); assertFalse(model.hasRoadUserOn(SW, NW)); assertTrue(model.hasRoadUserOn(NW, NE)); model.getGraph().removeConnection(SW, NW); }
/** * Test removal of object. */ @Test public void testRemoveObject() { final MovingRoadUser car = new TestRoadUser(); boolean fail = false; try { model.removeObject(car); } catch (final IllegalArgumentException e) { fail = true; } assertTrue(fail); model.addObjectAt(car, NW); model.removeObject(car); assertTrue(model.getObjects().isEmpty()); assertFalse(model.hasRoadUserOn(NW, NE)); }
/** * Tests removals when a connection is occupied. */ @Test public void testRemoveConnectionOccupied() { final MovingRoadUser user = new TestRoadUser(); model.addObjectAt(user, SW); model.moveTo(user, NW, hour(1)); // remove everything except the connection with the user on it model.getGraph().removeConnection(NW, SW); model.getGraph().removeNode(NE); model.getGraph().removeNode(SE); assertEquals(1, model.getGraph().getConnections().size()); assertEquals(2, model.getGraph().getNodes().size()); // attempt removal of occupied conn, should fail boolean fail = false; try { model.getGraph().removeConnection(SW, NW); } catch (final IllegalStateException e) { fail = true; } assertThat(fail).isEqualTo(isGraphModCheckEnabled); }
public void testRemoveConnCornerOccupied() { boolean fail = false; model.addObjectAt(new TestRoadUser(), SW); model.getGraph().removeNode(SE); model.getGraph().removeConnection(SW, NW); try { model.getGraph().removeConnection(NW, SW); } catch (final IllegalStateException e) { fail = true; model.getGraph().addConnection(NW, SW); model.getGraph().removeNode(NW); } catch (final IllegalStateException e) { model.getGraph().addConnection(NW, SW); fail = true; model.getGraph().addConnection(SW, NE); model.getGraph().removeNode(NW);
private void updateSnapshot() { snapshot = Optional.of(GraphRoadModelSnapshot.create( ImmutableGraph.copyOf(getGraph()), getDistanceUnit())); }
public void testModifyGraphUpdateShortestPath() { final TestRoadUser tru = new TestRoadUser(); model.addObjectAt(tru, SW); model.moveTo(tru, NW, hour(1)); model.moveTo(tru, NE, hour(1)); final MoveProgress mp = model.moveTo(tru, NE, hour(38)); assertEquals(38d, mp.distance().getValue().doubleValue(), GraphRoadModelImpl.DELTA); assertEquals(NE, model.getPosition(tru)); assertEquals(asList(NW, SW, SE, NE), mp.travelledNodes()); model.moveTo(tru, SE, hour(1)); model.moveTo(tru, SW, hour(1)); final MoveProgress mp2 = model.moveTo(tru, SW, hour(10)); assertEquals(SW, model.getPosition(tru)); model.moveTo(tru, NW, hour(10)); model.moveTo(tru, SW, hour(1)); model.moveTo(tru, SE, hour(1)); final MoveProgress mp3 = model.moveTo(tru, SE, hour(18)); assertEquals(SE, model.getPosition(tru));
@Override public boolean hasRoadUserOn(Point from, Point to) { return dgrm.hasRoadUserOn(from, to); }
/** * Checks whether there is a {@link RoadUser} on the connection between * <code>from</code> and <code>to</code> (inclusive). * @param from The start point of a connection. * @param to The end point of a connection. * @return <code>true</code> if a {@link RoadUser} occupies either * <code>from</code>, <code>to</code> or the connection between * <code>from</code> and <code>to</code>, <code>false</code> * otherwise. * @throws IllegalArgumentException if no connection exists between * <code>from</code> and <code>to</code>. */ @Override public boolean hasRoadUserOn(Point from, Point to) { checkConnectionsExists(from, to); return registry().hasObjectOn(graph.getConnection(from, to)) || registry().hasObjectOn(from) || registry().hasObjectOn(to); }
@Override public void removeObject(RoadUser object) { checkExists(object); occupiedNodes.removeAll(object); super.removeObject(object); }
@Override public DynamicGraphRoadModelImpl build( DependencyProvider dependencyProvider) { return new DynamicGraphRoadModelImpl(getGraph(), this); }
@Override protected void checkMoveValidity(Point objLoc, Point nextHop) { super.checkMoveValidity(objLoc, nextHop); // check if there is a vehicle driving in the opposite direction if (!objLoc.equals(nextHop)) { final Connection<?> conn = getConnection(objLoc, nextHop); if (graph.hasConnection(conn.to(), conn.from()) && registry() .hasObjectOn(Connection.create(conn.to(), conn.from()))) { throw new DeadlockException(conn); } } }
@Override public boolean hasRoadUserOn(Point from, Point to) { return dgrm.hasRoadUserOn(from, to); }
/** * Returns all {@link RoadUser}s that are on the connection between * <code>from</code> and <code>to</code> (inclusive). * @param from The start point of a connection. * @param to The end point of a connection. * @return The {@link RoadUser}s that are on the connection, or an empty set * in case {@link #hasRoadUserOn(Point, Point)} returns * <code>false</code>. * @throws IllegalArgumentException if no connection exists between * <code>from</code> and <code>to</code>. */ @Override public ImmutableSet<RoadUser> getRoadUsersOn(Point from, Point to) { checkConnectionsExists(from, to); final Connection<?> conn = graph.getConnection(from, to); return ImmutableSet.<RoadUser>builder() .addAll(registry().getObjectsOn(conn)) .addAll(registry().getObjectsOn(from)) .addAll(registry().getObjectsOn(to)) .build(); }
@Override public ListenableGraph<?> getGraph() { return dgrm.getGraph(); }
@Override public ImmutableSet<RoadUser> getRoadUsersOn(Point from, Point to) { return dgrm.getRoadUsersOn(from, to); }