/** * @return A new {@link ModelManager} instance. */ public ModelManager build() { return new ModelManager(resolver.resolve()); } }
Builder() { rng = new MersenneTwister(DEFAULT_SEED); timeUnit = SI.MILLI(SI.SECOND); tickLength = DEFAULT_TICK_LENGTH; mmBuilder = ModelManager.builder(); }
/** * Returns all models registered in the simulator. * @return immutable list of models. */ public ImmutableSet<Model<?>> getModels() { return modelManager.getModels(); }
public void registerAndUnregisterFail() { final OtherFooModel model = new OtherFooModel(); final ModelManager mm = new ModelManager(ImmutableSet.of(model)); final Object o = new Object(); mm.unregister(o); } catch (final IllegalArgumentException e) { fail = true; mm.register(o); } catch (final IllegalArgumentException e) { fail = true; mm.unregister(o); } catch (final IllegalArgumentException e) { fail = true;
final ModelManager mm = new ModelManager(ImmutableSet.of( new Model<InnerObject>() { @Override mm.register(new InnerObject()); } catch (final IllegalArgumentException e) { fail = true;
/** * Test correct working with two models. */ @Test public void addWhenTwoModels() { final OtherFooModel model = new OtherFooModel(); final BarModel model2 = new BarModel(); final ModelManager mm = new ModelManager(ImmutableSet.of(model, model2)); mm.register(new Foo()); mm.register(new Bar()); mm.register(new Foo()); assertThat(model.calledRegister).isEqualTo(2); assertThat(model.calledTypes).isEqualTo(1); assertThat(model2.calledRegister).isEqualTo(1); assertThat(mm.getModels()).containsAllOf(model, model2); }
/** * Test multi composite. */ @Test public void testComposite() { final ModelManager mm = ModelManager.builder() .add(new ModelA.Builder()) .build(); final Iterable<Class<?>> classes = transform(mm.getModels(), toClass()); assertThat(classes).containsAllOf(ModelA.class, ModelAsub1.class, ModelAsub1sub1.class, ModelAsub2.class).inOrder(); }
/** * Tests that unregistering an not registered object fails. */ @Test public void unregisterFailNotRegisteredObject() { final ModelManager mm = new ModelManager( ImmutableSet.of( RoadModelBuilders.staticGraph(new MultimapGraph<LengthData>()) .build(mock(DependencyProvider.class)), RoadModelBuilders.staticGraph(new MultimapGraph<LengthData>()) .build(mock(DependencyProvider.class)))); boolean fail = false; try { mm.unregister(new RoadUser() { @Override public void initRoadUser(RoadModel model) {} }); } catch (final IllegalArgumentException e) { fail = true; } assertTrue(fail); }
/** * Tests for unregistering a previously registered object. */ @Test @Ignore public void unregisterRegistered() { final OtherFooModel model = new OtherFooModel(); final BarModel model2 = new BarModel(); emptyManager.register(model); emptyManager.register(model2); final Foo foo = new Foo(); final Bar bar = new Bar(); emptyManager.register(foo); emptyManager.register(bar); emptyManager.unregister(foo); assertEquals(1, model.calledRegister); assertEquals(1, model2.calledRegister); assertEquals(1, model.callUnregister); }
@Override public void register(Object obj) { LOGGER.info("{} - register({})", clock.getCurrentTime(), obj); modelManager.register(obj); }
void checkUnregister() { if (!toUnregister.isEmpty()) { for (final Object o : toUnregister) { modelManager.unregister(o); } toUnregister.clear(); } }
/** * Registers the given object. * @param object The object to register. * @param <T> The type of object. * @throws IllegalArgumentException if an instance of {@link Model} is * provided or if the model could not be registered to any model. */ public <T> void register(T object) { checkArgument( !(object instanceof Model<?>), "Can not register a model: %s. " + "Models can be added via Simulator.builder().", object); final boolean success = doRegister(object); checkArgument( success, "The object %s with type %s can not be registered to any model.", object, object.getClass()); }
@Override @Nonnull public <T extends Model<?>> T getModel(Class<T> clazz) { final T m = tryGetModel(clazz); checkArgument(m != null, "The specified model %s does not exist.", clazz); return m; }
/** * Start the simulation. */ public void start() { if (modelManager.getUserInterface().isPresent()) { modelManager.getUserInterface().get().show(); } else { clock.start(); } }
Simulator(Builder b) { modelManager = b.mmBuilder .add(SimulatorModelBuilder.create(this)) .addDefaultProvider( RandomModel.builder().withRandomGenerator( StochasticSuppliers.constant(b.rng))) .addDefaultProvider( TimeModel.builder() .withTickLength(b.tickLength) .withTimeUnit(b.timeUnit)) .build(); toUnregister = new LinkedHashSet<>(); clock = modelManager.getModel(TimeModel.class); rand = modelManager.getModel(RandomModel.class); }
final ModelManager mm = new ModelManager(ImmutableSet.<Model<?>>of( mA, mAA, mB, mB2, mBB, mBBB, mSB, mC)); mm.register(a1); assertEquals(asList(a1), mA.getRegisteredElements()); assertEquals(asList(a1), mAA.getRegisteredElements()); mm.register(a2); assertEquals(asList(a1, a2), mA.getRegisteredElements()); assertEquals(asList(a1, a2), mAA.getRegisteredElements()); boolean fail = false; try { mm.register(a3); } catch (final IllegalArgumentException e) { fail = true; mm.register(a1); assertEquals(asList(a1, a2, a3, a1), mA.getRegisteredElements()); assertEquals(asList(a1, a2, a3, a1), mAA.getRegisteredElements()); mm.register(b1); assertEquals(asList(b1), mB.getRegisteredElements()); assertEquals(asList(b1), mB2.getRegisteredElements()); mm.register(s1); assertEquals(asList(b1, s1), mB.getRegisteredElements()); assertEquals(asList(b1, s1), mB2.getRegisteredElements());
/** * Tests that only known types can be registered successfully. */ @Test public void addOtherFooModel() { final OtherFooModel model = new OtherFooModel(); final ModelManager mm = new ModelManager(ImmutableSet.of(model)); mm.register(new Foo()); boolean fail = false; try { mm.register(new Bar()); } catch (final IllegalArgumentException e) { fail = true; } assertTrue(fail); assertEquals(1, model.calledRegister); assertEquals(1, model.calledTypes); }
/** * Test multi composite. */ @Test public void testCompositeDefault() { final ModelManager mm = ModelManager.builder() .addDefaultProvider(new ModelA.Builder()) .build(); final Iterable<Class<?>> classes = transform(mm.getModels(), toClass()); assertThat(classes).containsAllOf(ModelA.class, ModelAsub1.class, ModelAsub1sub1.class, ModelAsub2.class).inOrder(); }
/** * Tests that an exception thrown by a model during unregister bubbles up. */ @Test public void unregisterWithBrokenModel() { final ModelManager mm = new ModelManager( ImmutableSet.of(RoadModelBuilders.staticGraph( new MultimapGraph<LengthData>()) .build(mock(DependencyProvider.class)), new BrokenRoadModel(new MultimapGraph<LengthData>()))); boolean fail = false; try { mm.unregister(new RoadUser() { @Override public void initRoadUser(RoadModel model) {} }); } catch (final RuntimeException e) { fail = true; } assertThat(fail).isTrue(); }
/** * Tests that registering an object with a type not associated to any model * fails. */ @Test public void registerFail() { boolean fail = false; try { emptyManager.register(new Object()); } catch (final IllegalArgumentException e) { fail = true; } assertTrue(fail); }