[
https://issues.jboss.org/browse/SEAMXML-25?page=com.atlassian.jira.plugin...
]
Jozef Hartinger edited comment on SEAMXML-25 at 3/18/11 7:17 AM:
-----------------------------------------------------------------
I implemented both approaches. To demonstrate the problem better, here's the code you
currently need to write to configure a cavalry with two knights:
{code:xml}
<test:Cavalry>
<test:knights>
<value>
<test:Knight>
<test:horse>
<value>
<test:Horse name="Ace" />
</value>
</test:horse>
<test:sword>
<value>
<test:Sword type="sharp" />
</value>
</test:sword>
</test:Knight>
</value>
<value>
<test:Knight>
<test:horse>
<value>
<test:Horse name="Apples" />
</value>
</test:horse>
<test:sword>
<value>
<test:Sword type="blunt" />
</value>
</test:sword>
</test:Knight>
</value>
</test:knights>
</test:Cavalry>
{code}
With the first approach, the <values> element is introduced, which can be used when
an initial value of a collection is set making the configuration file a little less
verbose. This change is implemented at
https://github.com/jharting/seam-config/tree/SEAMXML-25-values
{code:xml}
<test:Cavalry>
<test:knights>
<values>
<test:Knight>
<test:horse>
<value>
<test:Horse name="Ace" />
</value>
</test:horse>
<test:sword>
<value>
<test:Sword type="sharp" />
</value>
</test:sword>
</test:Knight>
<test:Knight>
<test:horse>
<value>
<test:Horse name="Apples" />
</value>
</test:horse>
<test:sword>
<value>
<test:Sword type="blunt" />
</value>
</test:sword>
</test:Knight>
</values>
</test:knights>
</test:Cavalry>
{code}
Alternatively, the <value> element can be omitted completely, making the
configuration a lot more similar to the Seam 2 components.xml file. (Actually, the only
case when the <value> is needed is when setting a collection / array field with
primitive / String types, since you need to be able to separate the values within the text
of an element somehow)
This approach is implemented at
https://github.com/jharting/seam-config/tree/SEAMXML-25
Note that although this change is quite radical, it is completely backward-compatible and
one can still use the <value> element if needed. This change only makes the element
optional in most of the possible some cases.
{code:xml}
<test:Cavalry>
<test:knights>
<test:Knight>
<test:horse>
<test:Horse name="Ace" />
</test:horse>
<test:sword>
<test:Sword type="sharp" />
</test:sword>
</test:Knight>
<test:Knight>
<test:horse>
<test:Horse name="Apples" />
</test:horse>
<test:sword>
<test:Sword type="blunt" />
</test:sword>
</test:Knight>
</test:knights>
</test:Cavalry>
{code}
Stuart, please review the code and let me know which alternative you prefer.
was (Author: jharting):
I implemented both approaches. To demonstrate the problem better, here's the code
you currently need to write to configure a cavalry with two knights:
{code:xml}
<test:Cavalry>
<test:knights>
<value>
<test:Knight>
<test:horse>
<value>
<test:Horse name="Ace" />
</value>
</test:horse>
<test:sword>
<value>
<test:Sword type="sharp" />
</value>
</test:sword>
</test:Knight>
</value>
<value>
<test:Knight>
<test:horse>
<value>
<test:Horse name="Apples" />
</value>
</test:horse>
<test:sword>
<value>
<test:Sword type="blunt" />
</value>
</test:sword>
</test:Knight>
</value>
</test:knights>
</test:Cavalry>
{code}
With the first approach, the <values> element is introduced, which can be used when
an initial value of a collection is set making the configuration file a little less
verbose. This change is implemented at
https://github.com/jharting/seam-config/tree/SEAMXML-25-values
{code:xml}
<test:Cavalry>
<test:knights>
<values>
<test:Knight>
<test:horse>
<value>
<test:Horse name="Ace" />
</value>
</test:horse>
<test:sword>
<value>
<test:Sword type="sharp" />
</value>
</test:sword>
</test:Knight>
<test:Knight>
<test:horse>
<value>
<test:Horse name="Apples" />
</value>
</test:horse>
<test:sword>
<value>
<test:Sword type="blunt" />
</value>
</test:sword>
</test:Knight>
</values>
</test:knights>
</test:Cavalry>
{code}
Alternatively, the <value> element can be omitted completely, making the
configuration a lot more similar to the Seam 2 components.xml file. (Actually, the only
case when the <value> is needed is when setting a collection / array field with
primitive / String types, since you need to be able to separate the values within the text
of an element somehow)
This approach is implemented at
https://github.com/jharting/seam-config/tree/SEAMXML-25-values
Note that although this change is quite radical, it is completely backward-compatible and
one can still use the <value> element if needed. This change only makes the element
optional in most of the possible some cases.
{code:xml}
<test:Cavalry>
<test:knights>
<test:Knight>
<test:horse>
<test:Horse name="Ace" />
</test:horse>
<test:sword>
<test:Sword type="sharp" />
</test:sword>
</test:Knight>
<test:Knight>
<test:horse>
<test:Horse name="Apples" />
</test:horse>
<test:sword>
<test:Sword type="blunt" />
</test:sword>
</test:Knight>
</test:knights>
</test:Cavalry>
{code}
Stuart, please review the code and let me know which alternative you prefer.
Introduce s:values tag
----------------------
Key: SEAMXML-25
URL:
https://issues.jboss.org/browse/SEAMXML-25
Project: Seam Config
Issue Type: Feature Request
Components: XML Provider
Affects Versions: 3.0.0.Beta1
Reporter: Jozef Hartinger
Assignee: Stuart Douglas
Priority: Minor
Fix For: Future
Currently, it is quite verbose to populate a collection with configured object instances
using the XML module.
For example:
Foo is a class having a collection (bars) of Bars
<e:Foo>
<e:bars>
<s:value>
<e:Bar id="1"/>
</s:value>
<s:value>
<e:Bar id="2"/>
</s:value>
<s:value>
<e:Bar id="3"/>
</s:value>
<s:value>
<e:Bar id="4"/>
</s:value>
</e:bars>
</e:Foo>
If the s:values tag is introduced, it'll make the configuration less verbose
<e:Foo>
<e:bars>
<s:values>
<e:Bar id="1"/>
<e:Bar id="2"/>
<e:Bar id="3"/>
<e:Bar id="4"/>
</s:values>
</e:bars>
</e:Foo>
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira