/** * Create a Model for a registered Blueprint. Values set in the * model will not be overridden by defaults in the Blueprint. * * @param <T> model Class * @param referenceModel Object * @return Model * @throws CreateModelException model failed to create */ public <T> T createModel(T referenceModel) throws CreateModelException { return createModel(referenceModel, true); }
/** * Create a Model for a registered Blueprint * * @param <T> model Class * @param clazz Model class * @return Model * @throws CreateModelException model failed to create */ public <T> T createModel(Class<T> clazz) throws CreateModelException { return createModel(clazz, true); }
/** * Create a Model for a registered Blueprint * * @param <T> model Class * @param clazz Model class * @param withPolicies boolean if Policies should be applied to the create * @return Model * @throws CreateModelException model failed to create */ public <T> T createModel(Class<T> clazz, boolean withPolicies) throws CreateModelException { Erector erector = erectors.get(clazz); if (erector == null) { throw new CreateModelException("Unregistered class: " + clazz); } return createModel(erector, null, withPolicies); }
/** * Create a Model for a registered Blueprint. Values set in the * model will not be overridden by defaults in the Blueprint. * * @param <T> model Class * @param referenceModel Object * @param withPolicies boolean if Policies should be applied to the create * @return Model * @throws CreateModelException model failed to create */ @SuppressWarnings({"rawtypes", "unchecked"}) public <T> T createModel(T referenceModel, boolean withPolicies) throws CreateModelException { Erector erector = erectors.get(referenceModel.getClass()); if (erector == null) { throw new CreateModelException("Unregistered class: " + referenceModel.getClass()); } return createModel(erector, referenceModel, withPolicies); }
@Test public void testBlueprintConstructorOnlyTriggeredOncePerCreateModelInvocation() throws Exception { Erector erector = mock(Erector.class); modelFactory.getErectors().put(Car.class, erector); modelFactory.createModel(Car.class); verify(erector, times(1)).createNewInstance(); } }
@Test public void singletonPolicyWithModel() throws ModelFactoryException { Driver driver = modelFactory.createModel(Driver.class); modelFactory.addPolicy(new MappedSingletonPolicy(driver)); Car car1 = modelFactory.createModel(Car.class); Car car2 = modelFactory.createModel(Car.class); Car car3 = modelFactory.createModel(Car.class); assertEquals(car1.getDriver(), driver); assertEquals(car2.getDriver(), driver); assertEquals(car3.getDriver(), driver); } }
@Test public void singletonPolicyWithClass() throws ModelFactoryException { modelFactory.addPolicy(new MappedSingletonPolicy(Driver.class)); Car car1 = modelFactory.createModel(Car.class); Car car2 = modelFactory.createModel(Car.class); Car car3 = modelFactory.createModel(Car.class); Driver driver = car1.getDriver(); assertEquals(car2.getDriver(), driver); assertEquals(car3.getDriver(), driver); }
@Test public void testCreateModelWithConstructorCallBack() throws CreateModelException { Wheel wheel1 = modelFactory.createModel(Wheel.class); assertEquals("tire name", wheel1.getName()); Wheel wheel2 = modelFactory.createModel(Wheel.class); assertEquals("tire name", wheel1.getName()); assertFalse("Should create new instances", wheel1.equals(wheel2)); }
public void testEmptyListInjectsBlueprint() throws CreateModelException { Wheel wheel = new Wheel("Test"); wheel.setVariants(new ArrayList<Option>()); // still injected due to ignoreEmpty = true Wheel factoryWheel = modelFactory.createModel(wheel); assertEquals(3, factoryWheel.getOptions().size()); assertEquals(3, factoryWheel.getVariants().size()); }
@Test public void testFieldNull() throws CreateModelException { Car car = modelFactory.createModel(Car.class); assertNull(car.getPassenger()); } }
public void testEmptyListDoesNotInjectBlueprint() throws CreateModelException { Wheel wheel = new Wheel("Test"); wheel.setOptions(new ArrayList<Option>()); // prevents injection Wheel factoryWheel = modelFactory.createModel(wheel); assertEquals(0, factoryWheel.getOptions().size()); assertEquals(3, factoryWheel.getVariants().size()); }
@Test public void testForceAlwaysCreatesMappedList() throws CreateModelException { Car car = new Car(); car.setWheels(Arrays.asList(new Wheel[]{new Wheel("test")})); car = modelFactory.createModel(car); assertEquals("force=true ensures wheels will be injected", 4, car.getWheels().size()); } }
@Test public void carAfterCreateCallback() throws CreateModelException { Car car = modelFactory.createModel(Car.class); for( Wheel wheel: car.getWheels() ) { assertEquals(car, wheel.getCar()); } } }
@Test public void alwaySetFieldPolicy() throws ModelFactoryException { modelFactory.addPolicy(new SkipReferenceFieldPolicy("username", User.class)); User user1 = modelFactory.createModel(User.class); User user2 = modelFactory.createModel(user1); assertNotSame(user1.getUsername(), user2.getUsername()); assertEquals(user1.getEmails(), user2.getEmails()); }
@Test public void testDriverNameIsForced() throws CreateModelException { Driver driver = new Driver(); driver.setName("Test Name"); driver = modelFactory.createModel(Driver.class); assertEquals("Driver name is a forced default", "Lev the Driver", driver.getName()); } }
@Test public void spireTireBlueprintInheritsFromWheelBlueprint() throws CreateModelException { Wheel wheel = modelFactory.createModel(Wheel.class); SpareTire spareTire = modelFactory.createModel(SpareTire.class); assertEquals(wheel.getColor(), spareTire.getColor()); assertEquals("spare tire name", spareTire.getName()); assertEquals(9, (int) spareTire.getSize()); assertEquals(400, (int) spareTire.getMileLimit()); } }
@Test public void testCreateModelWithFieldCallBack() throws CreateModelException { User user = modelFactory.createModel(User.class); assertNotNull(user.getUsername()); assertTrue(user.getUsername().contains("username")); assertNotNull(user.getEmails()); assertEquals(3, user.getEmails().size()); for (String email : user.getEmails()) { assertTrue(email.contains("email")); assertTrue(email.contains("@test.net")); } } }
@Test public void testBlueprintWithPrimitive() throws CreateModelException, BlueprintTemplateException { Car car = modelFactory.createModel(Car.class); Erector erector = modelFactory.getErectors().get(Car.class); ModelField modelField = erector.getModelField("mileage"); assertEquals(new Float(100.1), modelField.getValue()); // Val is zero because primitive initializes as zero Object val = erector.getTemplate().get(new Car(), "mileage"); assertEquals(new Float(0.0), val); // Val is zero because primitive initializes as zero assertEquals(0.0, car.getMileage(), 0); } }
@Test public void testNestedMappedLists() throws CreateModelException { Car car = modelFactory.createModel(Car.class); assertEquals(4, car.getWheels().size()); for (Wheel wheel : car.getWheels()) { assertEquals("tire name", wheel.getName()); assertEquals(3, wheel.getOptions().size()); for (Option option : wheel.getOptions()) { assertEquals("option", option.getName()); } } }
@Test public void testCreateModelWithClass() throws RegisterBlueprintException, CreateModelException { Car car = modelFactory.createModel(Car.class); assertEquals(carBlueprint.make, car.getMake()); assertEquals(carBlueprint.manufacturer, car.getManufacturer()); assertEquals(carBlueprint.status, car.getStatus()); assertEquals(4, car.getWheels().size()); for (Wheel wheel : car.getWheels()) { assertEquals(wheelBlueprint.size, wheel.getSize()); } }