@Override public void setPropertyValues(PropertyValues pvs) throws BeansException { setPropertyValues(pvs, false, false); }
@Override public void setPropertyValue(PropertyValue pv) throws BeansException { setPropertyValue(pv.getName(), pv.getValue()); }
@Test public void setStringArrayPropertyWithCustomStringDelimiter() throws Exception { PropsTester target = new PropsTester(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.registerCustomEditor(String[].class, "stringArray", new StringArrayPropertyEditor("-")); accessor.setPropertyValue("stringArray", "a1-b2"); assertTrue("stringArray length = 2", target.stringArray.length == 2); assertTrue("correct values", target.stringArray[0].equals("a1") && target.stringArray[1].equals("b2")); }
@Test public void setPropertyIntermediateListIsNullWithBadConversionService() { Foo target = new Foo(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.setConversionService(new GenericConversionService() { @Override public Object convert(@Nullable Object source, @Nullable TypeDescriptor sourceType, TypeDescriptor targetType) { throw new ConversionFailedException(sourceType, targetType, source, null); } }); accessor.setAutoGrowNestedPaths(true); accessor.setPropertyValue("listOfMaps[0]['luckyNumber']", "9"); assertEquals("9", target.listOfMaps.get(0).get("luckyNumber")); }
@Test public void setPropertyIntermediateListIsNullWithNoConversionService() { Foo target = new Foo(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.setAutoGrowNestedPaths(true); accessor.setPropertyValue("listOfMaps[0]['luckyNumber']", "9"); assertEquals("9", target.listOfMaps.get(0).get("luckyNumber")); }
@Test public void propertyTypeIndexedProperty() { IndexedTestBean target = new IndexedTestBean(); AbstractPropertyAccessor accessor = createAccessor(target); assertEquals(null, accessor.getPropertyType("map[key0]")); accessor = createAccessor(target); accessor.setPropertyValue("map[key0]", "my String"); assertEquals(String.class, accessor.getPropertyType("map[key0]")); accessor = createAccessor(target); accessor.registerCustomEditor(String.class, "map[key0]", new StringTrimmerEditor(false)); assertEquals(String.class, accessor.getPropertyType("map[key0]")); }
@Test public void setPropertyWithCustomEditor() { MutablePropertyValues values = new MutablePropertyValues(); values.add("name", Integer.class); TestBean target = new TestBean(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.registerCustomEditor(String.class, new PropertyEditorSupport() { @Override public void setValue(Object value) { super.setValue(value.toString()); } }); accessor.setPropertyValues(values); assertEquals(Integer.class.toString(), target.getName()); }
@Test public void setBooleanProperty() { BooleanTestBean target = new BooleanTestBean(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.setPropertyValue("bool2", "true"); assertTrue("Correct bool2 value", Boolean.TRUE.equals(accessor.getPropertyValue("bool2"))); assertTrue("Correct bool2 value", target.getBool2()); accessor.setPropertyValue("bool2", "false"); assertTrue("Correct bool2 value", Boolean.FALSE.equals(accessor.getPropertyValue("bool2"))); assertTrue("Correct bool2 value", !target.getBool2()); }
TestBean tb4 = ((TestBean) target.getMap().get("key1")); TestBean tb5 = ((TestBean) target.getMap().get("key2")); assertEquals(tb0, accessor.getPropertyValue("array[0]")); assertEquals(tb1, accessor.getPropertyValue("array[1]")); assertEquals(tb2, accessor.getPropertyValue("list[0]")); assertEquals(tb3, accessor.getPropertyValue("list[1]")); assertEquals(tb6, accessor.getPropertyValue("set[0]")); assertEquals(tb7, accessor.getPropertyValue("set[1]")); assertEquals(tb4, accessor.getPropertyValue("map[key1]")); assertEquals(tb5, accessor.getPropertyValue("map[key2]")); assertEquals(tb4, accessor.getPropertyValue("map['key1']")); assertEquals(tb5, accessor.getPropertyValue("map[\"key2\"]")); pvs.add("map[key5]", tb4); pvs.add("map['key9']", tb5); accessor.setPropertyValues(pvs); assertEquals(tb5, target.getArray()[0]); assertEquals(tb4, target.getArray()[1]); assertEquals(tb4, (target.getMap().get("key5"))); assertEquals(tb5, (target.getMap().get("key9"))); assertEquals(tb5, accessor.getPropertyValue("array[0]")); assertEquals(tb4, accessor.getPropertyValue("array[1]")); assertEquals(tb3, accessor.getPropertyValue("list[0]")); assertEquals(tb2, accessor.getPropertyValue("list[1]")); assertEquals(tb0, accessor.getPropertyValue("list[2]")); assertEquals(null, accessor.getPropertyValue("list[3]")); assertEquals(tb1, accessor.getPropertyValue("list[4]")); assertEquals(tb1, accessor.getPropertyValue("map[\"key1\"]"));
@Test public void setStringArrayPropertyWithStringSplitting() throws Exception { PropsTester target = new PropsTester(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.useConfigValueEditors(); accessor.setPropertyValue("stringArray", "a1,b2"); assertTrue("stringArray length = 2", target.stringArray.length == 2); assertTrue("correct values", target.stringArray[0].equals("a1") && target.stringArray[1].equals("b2")); }
private AbstractPropertyAccessor buildAccessor(Object job) { boolean injectType = configuration.getInjectionType() == InjectionType.FIELD; AbstractPropertyAccessor accessor = injectType ? new DirectFieldAccessor(job) : new BeanWrapperImpl(job); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(configuration.getDateFormat()); CustomDateEditor customDateEditor = new CustomDateEditor(simpleDateFormat, true); accessor.registerCustomEditor(Date.class, customDateEditor); return accessor; } }
@Test public void propertyTypeUnknownProperty() { Simple target = new Simple("John", 2); AbstractPropertyAccessor accessor = createAccessor(target); assertThat(accessor.getPropertyType("foo"), is(nullValue())); }
@Test public void propertyTypeDescriptor() { Person target = createPerson("John", "Paris", "FR"); AbstractPropertyAccessor accessor = createAccessor(target); assertThat(accessor.getPropertyTypeDescriptor("address.city"), is(notNullValue())); }
public <T> T convertIfNecessary(Object value, Class<T> requiredType) throws TypeMismatchException { return convertIfNecessary(value, requiredType, null); }
@Test public void setMapPropertyWithUnmodifiableMap() { IndexedTestBean target = new IndexedTestBean(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.registerCustomEditor(TestBean.class, "map", new PropertyEditorSupport() { @Override public void setAsText(String text) throws IllegalArgumentException { if (!StringUtils.hasLength(text)) { throw new IllegalArgumentException(); } setValue(new TestBean(text)); } }); Map<Integer, String> inputMap = new HashMap<>(); inputMap.put(1, "rod"); inputMap.put(2, "rob"); MutablePropertyValues pvs = new MutablePropertyValues(); pvs.add("map", Collections.unmodifiableMap(inputMap)); accessor.setPropertyValues(pvs); assertEquals("rod", ((TestBean) target.getMap().get(1)).getName()); assertEquals("rob", ((TestBean) target.getMap().get(2)).getName()); }
accessor.setPropertyValue("short2", new Integer(2)); accessor.setPropertyValue("int2", new Long(8)); accessor.setPropertyValue("long2", new BigInteger("6")); accessor.setPropertyValue("bigInteger", new Integer(3)); accessor.setPropertyValue("float2", new Double(8.1)); accessor.setPropertyValue("double2", new BigDecimal(6.1)); accessor.setPropertyValue("bigDecimal", new Float(4.0)); assertTrue("Correct short2 value", new Short("2").equals(accessor.getPropertyValue("short2"))); assertTrue("Correct short2 value", new Short("2").equals(target.getShort2())); assertTrue("Correct int2 value", new Integer("8").equals(accessor.getPropertyValue("int2"))); assertTrue("Correct int2 value", new Integer("8").equals(target.getInt2())); assertTrue("Correct long2 value", new Long("6").equals(accessor.getPropertyValue("long2"))); assertTrue("Correct long2 value", new Long("6").equals(target.getLong2())); assertTrue("Correct bigInteger value", new BigInteger("3").equals(accessor.getPropertyValue("bigInteger"))); assertTrue("Correct bigInteger value", new BigInteger("3").equals(target.getBigInteger())); assertTrue("Correct float2 value", new Float("8.1").equals(accessor.getPropertyValue("float2"))); assertTrue("Correct float2 value", new Float("8.1").equals(target.getFloat2())); assertTrue("Correct double2 value", new Double("6.1").equals(accessor.getPropertyValue("double2"))); assertTrue("Correct double2 value", new Double("6.1").equals(target.getDouble2())); assertTrue("Correct bigDecimal value", new BigDecimal("4.0").equals(accessor.getPropertyValue("bigDecimal"))); assertTrue("Correct bigDecimal value", new BigDecimal("4.0").equals(target.getBigDecimal()));
@SuppressWarnings("AssertEqualsBetweenInconvertibleTypes") @Test public void setPropertyIntermediateListIsNullWithAutoGrow() { Foo target = new Foo(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.setConversionService(new DefaultConversionService()); accessor.setAutoGrowNestedPaths(true); Map<String, String> map = new HashMap<>(); map.put("favoriteNumber", "9"); accessor.setPropertyValue("list[0]", map); assertEquals(map, target.list.get(0)); }
@Test public void setPropertyIntermediatePropertyIsNullWithAutoGrow() { Person target = createPerson("John", "Paris", "FR"); target.address.country = null; AbstractPropertyAccessor accessor = createAccessor(target); accessor.setAutoGrowNestedPaths(true); accessor.setPropertyValue("address.country.name", "UK"); assertThat(target.address.country.name, is("UK")); }
assertEquals("name4", tb4.getName()); assertEquals("name5", tb5.getName()); assertEquals("name0", accessor.getPropertyValue("array[0].name")); assertEquals("name1", accessor.getPropertyValue("array[1].name")); assertEquals("name2", accessor.getPropertyValue("list[0].name")); assertEquals("name3", accessor.getPropertyValue("list[1].name")); assertEquals("name6", accessor.getPropertyValue("set[0].name")); assertEquals("name7", accessor.getPropertyValue("set[1].name")); assertEquals("name4", accessor.getPropertyValue("map[key1].name")); assertEquals("name5", accessor.getPropertyValue("map[key.3].name")); assertEquals("name4", accessor.getPropertyValue("map['key1'].name")); assertEquals("name5", accessor.getPropertyValue("map[\"key.3\"].name")); assertEquals("nameX", accessor.getPropertyValue("map[key4][0].name")); assertEquals("nameY", accessor.getPropertyValue("map[key4][1].name")); pvs.add("map[key4][0].name", "nameA"); pvs.add("map[key4][1].name", "nameB"); accessor.setPropertyValues(pvs); assertEquals("name5", tb0.getName()); assertEquals("name4", tb1.getName()); assertEquals("name1", tb4.getName()); assertEquals("name0", tb5.getName()); assertEquals("name5", accessor.getPropertyValue("array[0].name")); assertEquals("name4", accessor.getPropertyValue("array[1].name")); assertEquals("name3", accessor.getPropertyValue("list[0].name")); assertEquals("name2", accessor.getPropertyValue("list[1].name")); assertEquals("name8", accessor.getPropertyValue("set[0].name")); assertEquals("name9", accessor.getPropertyValue("set[1].name"));
@Test public void setIntArrayPropertyWithStringSplitting() throws Exception { PropsTester target = new PropsTester(); AbstractPropertyAccessor accessor = createAccessor(target); accessor.useConfigValueEditors(); accessor.setPropertyValue("intArray", "4,5"); assertTrue("intArray length = 2", target.intArray.length == 2); assertTrue("correct values", target.intArray[0] == 4 && target.intArray[1] == 5); }