diff --git a/cust-services/pom.xml b/cust-services/pom.xml index 357f99a..297f2f8 100644 --- a/cust-services/pom.xml +++ b/cust-services/pom.xml @@ -33,7 +33,12 @@ org.apache.geronimo.specs geronimo-validation_1.0_spec 1.1 - provided + + + org.apache.bval + org.apache.bval.bundle + 0.5 + test org.apache.xmlrpc diff --git a/framework/pom.xml b/framework/pom.xml index fc15927..bbe0b37 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -29,32 +29,43 @@ - org.apache.geronimo.specs - geronimo-jpa_2.0_spec - 1.1 - provided - - - org.apache.geronimo.specs - geronimo-ejb_3.0_spec - 1.0.1 - provided - - - org.apache.geronimo.specs - geronimo-validation_1.0_spec - 1.1 - provided - - - org.apache.xmlrpc - xmlrpc-server - 3.1.3 - + org.apache.geronimo.specs + geronimo-jpa_2.0_spec + 1.1 + provided + + + org.apache.geronimo.specs + geronimo-ejb_3.0_spec + 1.0.1 + provided + + + org.apache.geronimo.specs + geronimo-validation_1.0_spec + 1.1 + + + org.apache.bval + org.apache.bval.bundle + 0.5 + test + + + org.apache.xmlrpc + xmlrpc-server + 3.1.3 + log4j log4j 1.2.17 + + joda-time + joda-time + 2.9.9 + + diff --git a/framework/src/main/java/de/hsadmin/module/ValueObject.java b/framework/src/main/java/de/hsadmin/module/ValueObject.java index 403b49f..ca6bb7a 100644 --- a/framework/src/main/java/de/hsadmin/module/ValueObject.java +++ b/framework/src/main/java/de/hsadmin/module/ValueObject.java @@ -12,6 +12,8 @@ public interface ValueObject { public Property get(String propertyName) throws UserException; + public Class getType(String name) throws TechnicalException; + public boolean hasProperty(String propertyName) throws UserException; public void copyPropertiesToPersistentObject(Object persistentObject) @@ -19,5 +21,4 @@ public interface ValueObject { public void copyPropertiesFromPersistentObject(Object persistentObject) throws UserException, TechnicalException; - } diff --git a/framework/src/main/java/de/hsadmin/module/impl/AbstractProperty.java b/framework/src/main/java/de/hsadmin/module/impl/AbstractProperty.java index a8e0ab2..d8d582a 100644 --- a/framework/src/main/java/de/hsadmin/module/impl/AbstractProperty.java +++ b/framework/src/main/java/de/hsadmin/module/impl/AbstractProperty.java @@ -87,13 +87,12 @@ public abstract class AbstractProperty implements Property { return (Class>) getClass(); } - @SuppressWarnings("unchecked") @Override public T getValue() throws TechnicalException { if (undefinedValue) { throw new TechnicalException("undefined value"); } - return (T) ReflectionUtil.invokeGetter(owningVO, getName()); + return getValueImpl(); } @Override @@ -140,7 +139,24 @@ public abstract class AbstractProperty implements Property { @Override public void copyValueFromParameterMap(Map rpcParameter) throws TechnicalException, UserException { - setValue(getParameterMapMapper().readValueFromParameterMap(rpcParameter, getName())); + setValue(getParameterMapMapper().readValueFromParameterMap(rpcParameter, getName(), owningVO.getType(getName()))); } + @Override + public void initValueFromVO() throws TechnicalException, UserException { + setValue(getValueImpl()); + } + + protected Class getFieldType() throws TechnicalException { + try { + return owningVO.getClass().getDeclaredField(getName()).getType(); + } catch (NoSuchFieldException | SecurityException e) { + throw new TechnicalException(e); + } + } + + @SuppressWarnings("unchecked") + private T getValueImpl() throws TechnicalException { + return (T) ReflectionUtil.invokeGetter(owningVO, getName()); + } } diff --git a/framework/src/main/java/de/hsadmin/module/impl/AbstractVO.java b/framework/src/main/java/de/hsadmin/module/impl/AbstractVO.java index 6326160..aaa0476 100644 --- a/framework/src/main/java/de/hsadmin/module/impl/AbstractVO.java +++ b/framework/src/main/java/de/hsadmin/module/impl/AbstractVO.java @@ -38,6 +38,15 @@ public abstract class AbstractVO implements ValueObject { } } } + + public void initPropertyValues() throws UserException, TechnicalException { + final Field[] fields = getClass().getDeclaredFields(); + for (Field f : fields) { + if (isPropertyField(f)) { + get(f.getName()).initValueFromVO(); + } + } + } @Override public List> properties() throws UserException, TechnicalException { @@ -61,6 +70,15 @@ public abstract class AbstractVO implements ValueObject { return propertiesMap.get(propertyName); } + @Override + public Class getType(String propertyName) throws TechnicalException { + try { + return getClass().getDeclaredField(propertyName).getType(); + } catch (NoSuchFieldException | SecurityException e) { + throw new TechnicalException(e); + } + } + @Override public boolean hasProperty(final String propertyName) throws UserException { assert propertyName != null && propertyName.length() > 0; @@ -164,5 +182,4 @@ public abstract class AbstractVO implements ValueObject { } return rwPolicy; } - } diff --git a/framework/src/main/java/de/hsadmin/module/property/Property.java b/framework/src/main/java/de/hsadmin/module/property/Property.java index 6e28d6a..393bd26 100644 --- a/framework/src/main/java/de/hsadmin/module/property/Property.java +++ b/framework/src/main/java/de/hsadmin/module/property/Property.java @@ -34,7 +34,8 @@ public interface Property { public void copyValueToParameterMap(final Map rpcParameter) throws TechnicalException, UserException; public void copyValueFromParameterMap(final Map rpcParameter) throws TechnicalException, UserException; - + + public void initValueFromVO() throws TechnicalException, UserException; } diff --git a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultBooleanParameterMapMapper.java b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultBooleanParameterMapMapper.java index 741d6b0..47b2309 100644 --- a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultBooleanParameterMapMapper.java +++ b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultBooleanParameterMapMapper.java @@ -19,7 +19,7 @@ public class DefaultBooleanParameterMapMapper implements @Override public Boolean readValueFromParameterMap(final Map rpcParameter, - final String propertyName) throws TechnicalException, UserException { + final String propertyName, final Class propertyClass) throws TechnicalException, UserException { final Object value = rpcParameter.get(propertyName); if (value instanceof Boolean) { return (Boolean) value; diff --git a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultDateParameterMapMapper.java b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultDateParameterMapMapper.java index 7c77c98..537fb47 100644 --- a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultDateParameterMapMapper.java +++ b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultDateParameterMapMapper.java @@ -22,7 +22,7 @@ public class DefaultDateParameterMapMapper implements ParameterMapMapper { @Override public Date readValueFromParameterMap(final Map rpcParameter, - final String propertyName) throws TechnicalException, UserException { + final String propertyName, final Class propertyClass) throws TechnicalException, UserException { final Object value = rpcParameter.get(propertyName); if (value instanceof Date) { return (Date) value; diff --git a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultEnumParameterMapMapper.java b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultEnumParameterMapMapper.java new file mode 100644 index 0000000..0f96e3c --- /dev/null +++ b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultEnumParameterMapMapper.java @@ -0,0 +1,38 @@ +package de.hsadmin.module.property.mapping; + +import java.util.Map; + +import de.hsadmin.common.error.TechnicalException; +import de.hsadmin.common.error.UserError; +import de.hsadmin.common.error.UserException; + +public class DefaultEnumParameterMapMapper implements ParameterMapMapper> { + + @Override + public void writeValueToParameterMap(final Map rpcParameter, + final String propertyName, Enum value) + throws TechnicalException, UserException { + if (value != null) { + rpcParameter.put(propertyName, value.toString()); + } + } + + @Override + @SuppressWarnings("unchecked") + public Enum readValueFromParameterMap(Map rpcParameter, + final String propertyName, final Class propertyClass) + throws TechnicalException, UserException { + final Object value = rpcParameter.get(propertyName); + if (value instanceof Enum) { + return (Enum) value; + } + if (value instanceof String) { + try { + return Enum.valueOf(propertyClass.asSubclass(Enum.class), (String) value); + } catch (NumberFormatException e) { + throw new UserException(new UserError(UserError.MSG_INT_VALUE_EXPECTED, propertyName, (String) value)); + } + } + return null; + } +} \ No newline at end of file diff --git a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultIntegerParameterMapMapper.java b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultIntegerParameterMapMapper.java index b19b343..b16a163 100644 --- a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultIntegerParameterMapMapper.java +++ b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultIntegerParameterMapMapper.java @@ -10,7 +10,7 @@ public class DefaultIntegerParameterMapMapper implements ParameterMapMapper rpcParameter, - final String propertyName, Integer value) + final String propertyName, final Integer value) throws TechnicalException, UserException { if (value != null) { rpcParameter.put(propertyName, value.toString()); @@ -19,7 +19,7 @@ public class DefaultIntegerParameterMapMapper implements ParameterMapMapper rpcParameter, - final String propertyName) + final String propertyName, final Class propertyClass) throws TechnicalException, UserException { final Object value = rpcParameter.get(propertyName); if (value instanceof Integer) { diff --git a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultListParameterMapMapper.java b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultListParameterMapMapper.java index 2148e82..6c5b2c5 100644 --- a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultListParameterMapMapper.java +++ b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultListParameterMapMapper.java @@ -37,7 +37,8 @@ public class DefaultListParameterMapMapper implements Pa @SuppressWarnings("unchecked") @Override - public List readValueFromParameterMap(Map rpcParameter, String propertyName) + public List readValueFromParameterMap(final Map rpcParameter, + final String propertyName, final Class propertyClass) throws TechnicalException, UserException { final List value = new ArrayList<>(); final Object list = rpcParameter.get(propertyName); diff --git a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultStringParameterMapMapper.java b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultStringParameterMapMapper.java index 27943e0..5ad2474 100644 --- a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultStringParameterMapMapper.java +++ b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultStringParameterMapMapper.java @@ -17,7 +17,8 @@ public class DefaultStringParameterMapMapper implements ParameterMapMapper rpcParameter, - final String propertyName) throws TechnicalException, UserException { + final String propertyName, final Class propertyClass) + throws TechnicalException, UserException { final Object value = rpcParameter.get(propertyName); if (value instanceof String) { return (String) value; diff --git a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultStringSetParameterMapMapper.java b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultStringSetParameterMapMapper.java index b581926..fb6c1b6 100644 --- a/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultStringSetParameterMapMapper.java +++ b/framework/src/main/java/de/hsadmin/module/property/mapping/DefaultStringSetParameterMapMapper.java @@ -22,7 +22,7 @@ public class DefaultStringSetParameterMapMapper implements @Override public StringSet readValueFromParameterMap( - final Map rpcParameter, final String propertyName) + final Map rpcParameter, final String propertyName, final Class propertyClass) throws TechnicalException, UserException { final Object rpcParam = rpcParameter.get(propertyName); final StringSet value = new StringSet(); diff --git a/framework/src/main/java/de/hsadmin/module/property/mapping/ParameterMapMapper.java b/framework/src/main/java/de/hsadmin/module/property/mapping/ParameterMapMapper.java index 36996cb..6847793 100644 --- a/framework/src/main/java/de/hsadmin/module/property/mapping/ParameterMapMapper.java +++ b/framework/src/main/java/de/hsadmin/module/property/mapping/ParameterMapMapper.java @@ -9,6 +9,6 @@ public interface ParameterMapMapper { void writeValueToParameterMap(Map rpcParameter, String propertyName, T value) throws TechnicalException, UserException; - T readValueFromParameterMap(Map rpcParameter, String propertyName) throws TechnicalException, UserException; + T readValueFromParameterMap(Map rpcParameter, String propertyName, Class propertyClass) throws TechnicalException, UserException; } diff --git a/framework/src/test/java/de/hsadmin/module/property/mapping/DefaultEnumParameterMapMapperTest.java b/framework/src/test/java/de/hsadmin/module/property/mapping/DefaultEnumParameterMapMapperTest.java new file mode 100644 index 0000000..3e6c671 --- /dev/null +++ b/framework/src/test/java/de/hsadmin/module/property/mapping/DefaultEnumParameterMapMapperTest.java @@ -0,0 +1,32 @@ +package de.hsadmin.module.property.mapping; + +import static org.junit.Assert.assertEquals; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; + +import de.hsadmin.common.error.TechnicalException; +import de.hsadmin.common.error.UserException; + +public class DefaultEnumParameterMapMapperTest { + + private static enum SomeEnum { A, B }; + + private static final Map rpcParameters = new HashMap(); + static { + rpcParameters.put("testA", "A"); + } + + @Test + public void readValueFromParameterMap() throws TechnicalException, UserException{ + assertEquals(SomeEnum.A, new DefaultEnumParameterMapMapper().readValueFromParameterMap(rpcParameters, "testA", SomeEnum.class)); + } + + @Test + public void writeValueToParameterMap() throws TechnicalException, UserException{ + new DefaultEnumParameterMapMapper().writeValueToParameterMap(rpcParameters, "testB", SomeEnum.B); + assertEquals("B", rpcParameters.get("testB")); + } +} diff --git a/pom.xml b/pom.xml index b4997f7..d1cbf33 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,8 @@ 1.7 1.7 + true + true @@ -41,5 +43,11 @@ 4.12 test + + pl.pragmatists + JUnitParams + 1.0.4 + test +