Message: A new issue has been created in JIRA.
--------------------------------------------------------------------- View the issue: http://opensource.atlassian.com/projects/xdoclet/browse/XDT-1356 Here is an overview of the issue: --------------------------------------------------------------------- Key: XDT-1356 Summary: add support for jdo 2.0 embedded objects Type: Improvement Status: Open Priority: Major Original Estimate: 1 day Time Spent: Unknown Remaining: 1 day Project: XDoclet Components: JDO Module Versions: 1.2.3 Assignee: xdoclet-devel (Use for new issues) Reporter: adriaan peens-hough Created: Thu, 21 Apr 2005 3:49 AM Updated: Thu, 21 Apr 2005 3:49 AM Description: currently the jdo doclet has no support for mapping embedded fields as defined in the jdo 2.0 spec (par 18.13.4). i've attached files & diffs for an 80% solution (using gnu diff until i get cvs going). where appropriate i'll provide diffs to both the code in cvs and to a modified version that includes the patch for XDT-1355 (defaultNames). regards adriaan peens-hough --- jdo.xml 2005-04-16 01:06:36.000000000 +0200 +++ jdo.xml 2005-04-20 19:13:14.859375000 +0200 @@ -35,6 +35,7 @@ <attribute name="embedded-value"/> <attribute name="mapped-by"/> <attribute name="table"/> +<attribute name="column-prefix"/> <attribute name="column"/> <attribute name="serialized"/> <attribute name="dependent"/> @@ -47,6 +48,9 @@ <attribute name="load-fetch-group"/> <attribute name="fetch-depth"/> </tag> +<tag target="field" name="@jdo.embedded"> +<attribute name="null-indicator-column"/> +</tag> <tag target="field" name="@sql.field"> <attribute name="table-name"/> <attribute name="column-name" required="true"/> --- xtags.xml 2005-04-16 01:02:50.000000000 +0200 +++ xtags.xml 2005-04-20 19:41:56.109375000 +0200 @@ -334,6 +334,15 @@ <mandatory>false</mandatory> <condition-description></condition-description> </parameter> + <parameter type="text"> + <name>column-prefix</name> + <usage-description> + This parameter can only be used in JDO 2.0! + It defines a prefix to be prepended to the column name. + Used internally by XDoclet when mapping embedded fields to columns. + </usage-description> + <mandatory>false</mandatory> + </parameter> <parameter type="bool"> <name>serialized</name> <usage-description> @@ -671,6 +680,48 @@ </tag> <tag> <level>field</level> + <name>jdo.embedded</name> + <usage-description> + The jdo.embedded tag is only available in JDO 2.0! + The embedded element specifies the mapping for an embedded type. + </usage-description> + <unique>true</unique> + <condition-description> + Applicable to any user-defined type persistent field. + </condition-description> + <condition type="field"/> + <parameter type="text"> + <name>null-indicator-column</name> + <usage-description> + Identifies the name of the column used to indicate whether the + embedded instance is null. + </usage-description> + <mandatory>false</mandatory> + <condition-description> + </condition-description> + </parameter> + <parameter type="text"> + <name>null-indicator-value</name> + <usage-description> + Specifies the value to use when the embedded instance is null. + </usage-description> + <mandatory>false</mandatory> + <condition-description> + </condition-description> + </parameter> + <parameter type="text"> + <name>owner-field</name> + <usage-description> + The name of the field in the embedded type that should contain a + reference to the owning instance. + </usage-description> + <mandatory>false</mandatory> + <condition-description> + </condition-description> + </parameter> + </tag> + <tag> + <level>field</level> <name>jdo.join-vendor-extension</name> <usage-description> The jdo.join-vendor-extension tag is only available in JDO 2.0! --- JdoTagsHandler.java 2005-04-16 13:10:18.000000000 +0200 +++ JdoTagsHandler.java 2005-04-20 19:21:36.703125000 +0200 @@ -8,6 +8,7 @@ import java.util.Collection; import java.util.Iterator; +import java.util.List; import java.util.Properties; import xjavadoc.*; @@ -172,4 +173,33 @@ _currentExtension = vendorExtension; } + /** + * Iterates over all declared fields of the current embedded field. + * If the "outer" field declares a "jdo.field : column-prefix" attribute, + * that value will replace the same attribute's value on all of its + * "inner" fields. + * + * @param template + * @exception XDocletException + * @doc.tag type="block" + */ + public void forAllEmbeddedFields(String template) throws XDocletException + { + XField outerField = getCurrentField(); + String columnPrefix = outerField.getDoc().getTagAttributeValue("jdo.field", "column-prefix"); + + List innerFields = outerField.getType().getFields(); + for (int i = 0; i < innerFields.size(); i ++) { + XField innerField = (XField)innerFields.get(i); + setCurrentField(innerField); + if (columnPrefix != null) { + XTag prefix = innerField.getDoc().addTag("jdo.field", "column-prefix"); + prefix.setAttribute("column-prefix", columnPrefix); + } + generate(template); + } + + setCurrentField(outerField); + } + } (against cvs) --- jdo_xml.package_class_field.xdt 2005-04-16 01:02:50.000000000 +0200 +++ jdo_xml.package_class_field.xdt 2005-04-21 10:37:30.343750000 +0200 @@ -41,7 +41,7 @@ mapped-by="<XDtField:fieldTagValue tagName="jdo.field" paramName="mapped-by"/>" </XDtField:ifHasFieldTag> <XDtField:ifHasFieldTag tagName="jdo.field" paramName="column"> - column="<XDtField:fieldTagValue tagName="jdo.field" paramName="column"/>" + column="<XDtField:fieldTagValue tagName="jdo.field" paramName="column-prefix"/><XDtField:fieldTagValue tagName="jdo.field" paramName="column"/>" </XDtField:ifHasFieldTag> <XDtField:ifHasFieldTag tagName="jdo.field" paramName="delete-action"> delete-action="<XDtField:fieldTagValue tagName="jdo.field" paramName="delete-action" values="restrict,cascade,null,default,none"/>" @@ -154,6 +154,19 @@ </XDtConfig:ifConfigParamEquals> <XDtConfig:ifConfigParamEquals paramName="jdospec" value="2.0"> + <XDtField:ifHasFieldTag tagName="jdo.embedded"> + <XDtMerge:merge file="xdoclet/modules/jdo/resources/jdo_xml.package_class_field_embedded.xdt"> + </XDtMerge:merge> + </XDtField:ifHasFieldTag> + <XDtField:ifDoesntHaveFieldTag tagName="jdo.embedded"> + <XDtField:ifFieldTagValueEquals tagName="jdo.field" paramName="embedded" value="true"> + <XDtMerge:merge file="xdoclet/modules/jdo/resources/jdo_xml.package_class_field_embedded.xdt"> + </XDtMerge:merge> + </XDtField:ifFieldTagValueEquals> + </XDtField:ifDoesntHaveFieldTag> + </XDtConfig:ifConfigParamEquals> + + <XDtConfig:ifConfigParamEquals paramName="jdospec" value="2.0"> <XDtField:ifHasFieldTag tagName="jdo.join"> <XDtMerge:merge file="xdoclet/modules/jdo/resources/jdo_xml.package_class_field_join.xdt"> </XDtMerge:merge> (against cvs + XDT-1355) --- jdo_xml.package_class_field.xdt 2005-04-19 19:01:21.468750000 +0200 +++ jdo_xml.package_class_field.xdt 2005-04-20 20:58:29.437500000 +0200 @@ -41,17 +41,19 @@ mapped-by="<XDtField:fieldTagValue tagName="jdo.field" paramName="mapped-by"/>" </XDtField:ifHasFieldTag> <XDtField:ifHasFieldTag tagName="jdo.field" paramName="column"> - column="<XDtField:fieldTagValue tagName="jdo.field" paramName="column"/>" + column="<XDtField:fieldTagValue tagName="jdo.field" paramName="column-prefix"/><XDtField:fieldTagValue tagName="jdo.field" paramName="column"/>" </XDtField:ifHasFieldTag> <XDtConfig:ifConfigParamEquals paramName="defaultNames" value="true"> <XDtField:ifDoesntHaveFieldTag tagName="jdo.field" paramName="column"> + <XDtField:ifDoesntHaveFieldTag tagName="jdo.embedded"> <XDtField:ifDoesntHaveFieldTag tagName="jdo.field" paramName="embedded"> - column="<XDtField:fieldName/>" + column="<XDtField:fieldTagValue tagName="jdo.field" paramName="column-prefix"/><XDtField:fieldName/>" </XDtField:ifDoesntHaveFieldTag> <XDtField:ifFieldTagValueEquals tagName="jdo.field" paramName="embedded" value="false"> - column="<XDtField:fieldName/>" + column="<XDtField:fieldTagValue tagName="jdo.field" paramName="column-prefix"/><XDtField:fieldName/>" </XDtField:ifFieldTagValueEquals> </XDtField:ifDoesntHaveFieldTag> + </XDtField:ifDoesntHaveFieldTag> </XDtConfig:ifConfigParamEquals> <XDtField:ifHasFieldTag tagName="jdo.field" paramName="delete-action"> delete-action="<XDtField:fieldTagValue tagName="jdo.field" paramName="delete-action" values="restrict,cascade,null,default,none"/>" @@ -164,6 +166,19 @@ </XDtConfig:ifConfigParamEquals> <XDtConfig:ifConfigParamEquals paramName="jdospec" value="2.0"> + <XDtField:ifHasFieldTag tagName="jdo.embedded"> + <XDtMerge:merge file="xdoclet/modules/jdo/resources/jdo_xml.package_class_field_embedded.xdt"> + </XDtMerge:merge> + </XDtField:ifHasFieldTag> + <XDtField:ifDoesntHaveFieldTag tagName="jdo.embedded"> + <XDtField:ifFieldTagValueEquals tagName="jdo.field" paramName="embedded" value="true"> + <XDtMerge:merge file="xdoclet/modules/jdo/resources/jdo_xml.package_class_field_embedded.xdt"> + </XDtMerge:merge> + </XDtField:ifFieldTagValueEquals> + </XDtField:ifDoesntHaveFieldTag> + </XDtConfig:ifConfigParamEquals> + + <XDtConfig:ifConfigParamEquals paramName="jdospec" value="2.0"> <XDtField:ifHasFieldTag tagName="jdo.join"> <XDtMerge:merge file="xdoclet/modules/jdo/resources/jdo_xml.package_class_field_join.xdt"> </XDtMerge:merge> (new file) +++ jdo_xml.package_class_field_embedded.xdt 2005-04-20 21:48:58.843750000 +0200 @@ -0,0 +1,19 @@ + + <embedded + <XDtField:ifHasFieldTag tagName="jdo.embedded" paramName="null-indicator-column"> + null-indicator-column="<XDtField:fieldTagValue tagName="jdo.embedded" paramName="null-indicator-column"/>" + </XDtField:ifHasFieldTag> + <XDtField:ifHasFieldTag tagName="jdo.embedded" paramName="null-indicator-value"> + null-indicator-value="<XDtField:fieldTagValue tagName="jdo.embedded" paramName="null-indicator-value"/>" + </XDtField:ifHasFieldTag> + <XDtField:ifHasFieldTag tagName="jdo.embedded" paramName="owner-field"> + owner-field="<XDtField:fieldTagValue tagName="jdo.embedded" paramName="owner-field"/>" + </XDtField:ifHasFieldTag> + > <XDtComment:comment> end tag *embedded* </XDtComment:comment> + + <XDtJdo:forAllEmbeddedFields> + <XDtMerge:merge file="xdoclet/modules/jdo/resources/jdo_xml.package_class_field.xdt"> + </XDtMerge:merge> + </XDtJdo:forAllEmbeddedFields> + + </embedded> --------------------------------------------------------------------- JIRA INFORMATION: This message is automatically generated by JIRA. If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/xdoclet/secure/Administrators.jspa If you want more information on JIRA, or have a bug to report see: http://www.atlassian.com/software/jira ------------------------------------------------------- This SF.Net email is sponsored by: New Crystal Reports XI. Version 11 adds new functionality designed to reduce time involved in creating, integrating, and deploying reporting solutions. Free runtime info, new features, or free trial, at: http://www.businessobjects.com/devxi/728 _______________________________________________ xdoclet-devel mailing list xdoclet-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/xdoclet-devel