Details
-
Improvement
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
2.5.2
-
None
-
None
Description
The idea is having a small EDSL that simplifies the access to Property value, so rather than coding the following:
Property property = ...; boolean oldValue = property.getBoolean(); boolean newValue = !oldValue; property.setValue(newValue);
it could be simplified specifying wich type the users are interested on:
PropertyAccessors propertiesAccessor = ...; boolean oldValue = propertiesAccessor.get(property).to(boolean.class); boolean newValue = !oldValue; propertiesAccessor.set(newValue).to(property);
where PropertiesAccessor is the delegated to handle right types handling. By default it supports default Property value types, but it could be extended.
It could happen also that users would like to support a larger set of types, maybe performing conversions to/from default Property types, so rather than inserting the custom code in the app when required, they could use the PropertiesAccessor; they first need to register the Accessor implementation to (un)bind the type:
propertiesAccessor.handle(URI.class).with(new PropertyAccessor<URI>() { @Override public void set(URI value, Property target) throws ValueFormatException, RepositoryException { // ... } @Override public URI get(Property property) throws ValueFormatException, RepositoryException { // TODO ... return null; } });
so they can use the accessor via the PropertiesAccessor:
URI oldValue = propertiesAccessor.get(property).to(URI.class);
URI newValue = URI.create("http://jackrabbit.apache.org/");
propertiesAccessor.set(newValue).to(property);
Patch coming soon!