[
https://issues.apache.org/jira/browse/BEANUTILS-405?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michael Vorburger updated BEANUTILS-405:
----------------------------------------
Attachment: 0001-BEANUTILS-405-DynaBean-support-nested-dynamic-struct.patch
Attached proposed patch.
Same also on
https://github.com/vorburger/apache-commons-beanutils/commit/cc76a5ee7e86877745689cbdb520d210e9971493
(would be easier with BEANUTILS-404...)
> DynaBean should support nested dynamic structures
> -------------------------------------------------
>
> Key: BEANUTILS-405
> URL: https://issues.apache.org/jira/browse/BEANUTILS-405
> Project: Commons BeanUtils
> Issue Type: New Feature
> Components: DynaBean
> Affects Versions: 1.8.3
> Reporter: Michael Vorburger
> Attachments:
> 0001-BEANUTILS-405-DynaBean-support-nested-dynamic-struct.patch
>
>
> It would be useful if DynaBean would have support for "nested dynamic types",
> like e.g. EMF and SDO have.
> Currently simple types (or the content types of indexed or mapped types) must
> "be a Java language primitive (such as int, a simple object (such as a
> java.lang.String), or a more complex object whose class is defined either by
> the Java language". It turns out it wouldn't be very hard at all (I've tried
> and will attach a patch) to make some minor changes to relax this, and in
> addition also allow the following usage:
> {noformat} DynaProperty[] adrProps = new DynaProperty[]{
> new DynaProperty("zip", Long.class)
> };
> BasicDynaClass adrDynaClass = new BasicDynaClass("Address", adrProps);
> DynaProperty[] empProps = new DynaProperty[]{
> new DynaProperty("address", java.util.Map.class,
> adrDynaClass),
> new DynaProperty("subordinate", java.util.List.class,
> DynaClass.class),
> new DynaProperty("firstName", String.class),
> new DynaProperty("lastName", String.class),
> new DynaProperty("mainAddress", adrDynaClass),
> new DynaProperty("boss", DynaClass.class)
> };
> BasicDynaClass empDynaClass = new BasicDynaClass("Employee",
> empProps);
> empDynaClass.getDynaProperty("boss").setDynaType(empDynaClass);
> empDynaClass.getDynaProperty("subordinate").setDynaType(empDynaClass);
>
> // ---
>
> DynaBean address = adrDynaClass.newInstance();
> address.set("zip", new Long(9016));
> DynaBean subordinate = empDynaClass.newInstance();
> subordinate.set("firstName", "Dino");
> DynaBean boss = empDynaClass.newInstance();
> boss.set("firstName", "Wilma");
> DynaBean employee = empDynaClass.newInstance();
> employee.set("firstName", "Fred");
> employee.set("lastName", "Flintstone");
> employee.set("mainAddress", address);
> employee.set("boss", boss);
> PropertyUtils.setProperty(employee, "boss.lastName", "Flintstone");
> employee.set("address", new HashMap());
> PropertyUtils.setProperty(employee, "address(home)", address);
> employee.set("subordinate", new ArrayList());
> ((List)employee.get("subordinate")).add(subordinate);
> {noformat}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira