public <V> void setValue(OClass oClass, V value, boolean hiearchical) { if(hiearchical && Objects.equals(value, getValue(oClass, true))) return; if(OProperty.class.isAssignableFrom(javaClass) && value instanceof OProperty) { OProperty valueProperty = (OProperty)value; boolean fullNameRequired = !Objects.equals(oClass, valueProperty.getOwnerClass()); oClass.setCustom(name, fullNameRequired?valueProperty.getFullName():valueProperty.getName()); } else { if(!hiearchical && defaultValue!=null && defaultValue.equals(value)) value = null; String stringValue = value!=null?value.toString():null; if(stringValue!=null && stringValue.length()==0) stringValue=null; if(encode) stringValue = encodeCustomValue(stringValue); oClass.setCustom(name, stringValue); } }
public <V> void setValue(OProperty property, V value) { if(OProperty.class.isAssignableFrom(javaClass) && value instanceof OProperty) { OProperty valueProperty = (OProperty)value; boolean fullNameRequired = !Objects.equals(property.getOwnerClass(), valueProperty.getOwnerClass()); property.setCustom(name, fullNameRequired?valueProperty.getFullName():valueProperty.getName()); } else { if(defaultValue!=null && defaultValue.equals(value)) value = null; String stringValue = value!=null?value.toString():null; if(stringValue!=null && stringValue.length()==0) stringValue=null; if(encode) stringValue = encodeCustomValue(stringValue); property.setCustom(name, stringValue); } }
@Test public void testCustomEncode() throws Exception { assertNull(CustomAttribute.encodeCustomValue(null)); assertEquals("", CustomAttribute.encodeCustomValue("")); assertEquals("test", CustomAttribute.encodeCustomValue("test")); assertEquals("test\\etest", CustomAttribute.encodeCustomValue("test=test")); assertEquals("test\\rtest", CustomAttribute.encodeCustomValue("test\rtest")); assertEquals("test\\ntest", CustomAttribute.encodeCustomValue("test\ntest")); assertEquals("test\\\\test", CustomAttribute.encodeCustomValue("test\\test")); assertEquals("test\\etest\\rtest\\ntest\\\\test", CustomAttribute.encodeCustomValue("test=test\rtest\ntest\\test")); }