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

Reply via email to