Update of /cvsroot/xdoclet/xdoclet/modules/jdo/src/xdoclet/modules/jdo
In directory 
sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32247/modules/jdo/src/xdoclet/modules/jdo

Modified Files:
        JdoXmlMetadataSubTask.java JdoTagsHandler.java 
Log Message:
- removed the project's default-fetch-depth again (not necessary, because the 
fetch-depth applies only to a few special situations)
- added the possibility to declare the fetch-depth (in square brackets) for 
each field within a fetch-group (e.g.: jdo.fetch-group name="myFetchGroup" 
field-names="name, parent[2], children[5]")

Index: JdoXmlMetadataSubTask.java
===================================================================
RCS file: 
/cvsroot/xdoclet/xdoclet/modules/jdo/src/xdoclet/modules/jdo/JdoXmlMetadataSubTask.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -r1.16 -r1.17
*** JdoXmlMetadataSubTask.java  17 Sep 2005 15:49:34 -0000      1.16
--- JdoXmlMetadataSubTask.java  18 Sep 2005 23:37:51 -0000      1.17
***************
*** 61,68 ****
      private String  project = "metadata";
  
!     /**
!      * @see   #setFetchDepth(int)
!      */
!     private int     fetchDepth = -1;
  
      /**
--- 61,68 ----
      private String  project = "metadata";
  
! //    /**
! //     * @see   #setFetchDepth(int)
! //     */
! //    private int     fetchDepth = -1;
  
      /**
***************
*** 84,94 ****
      }
  
!     /**
!      * @return   Returns the fetch-depth as set by [EMAIL PROTECTED] 
#setFetchDepth(int)} or -1 if nothing was set.
!      */
!     public int getFetchDepth()
!     {
!         return fetchDepth;
!     }
  
      public void setProject(String project)
--- 84,94 ----
      }
  
! //    /**
! //     * @return   Returns the fetch-depth as set by [EMAIL PROTECTED] 
#setFetchDepth(int)} or -1 if nothing was set.
! //     */
! //    public int getFetchDepth()
! //    {
! //        return fetchDepth;
! //    }
  
      public void setProject(String project)
***************
*** 102,122 ****
      }
  
!     /**
!      * The JDO spec defines that a fetch-depth of 1 shall be used if a field 
has no fetch-depth declared. In case you
!      * don't like this default, you must tag every field with a different 
fetch-depth. This is an annoying work if you
!      * want to have the same for the majority of your fields. Hence, you have 
the possibility to declare the <code>fetchDepth</code>
!      * attribute for the <code>jdometadata</code> subtask. This will cause 
every field to be tagged with this default,
!      * if the field doesn't have a fetch-depth declared. If the field has a 
fetch-depth, this one is used.
!      *
!      * @param fetchDepth  Either -1 to indicate that no default-fetch-depth 
should be set, or 0 for infinite depth, or a
!      *      positive number indicating how many levels the detaching shall 
dive into the object-graph.
!      */
!     public void setFetchDepth(int fetchDepth)
!     {
!         if (fetchDepth < -1)
!             throw new IllegalArgumentException("fetchDepth=" + fetchDepth + " 
is illegal! Must be -1 to deactivate the default-fetch-depth or a number >= 
0!");
! 
!         this.fetchDepth = fetchDepth;
!     }
  
      /**
--- 102,122 ----
      }
  
! //    /**
! //     * The JDO spec defines that a fetch-depth of 1 shall be used if a 
field has no fetch-depth declared. In case you
! //     * don't like this default, you must tag every field with a different 
fetch-depth. This is an annoying work if you
! //     * want to have the same for the majority of your fields. Hence, you 
have the possibility to declare the <code>fetchDepth</code>
! //     * attribute for the <code>jdometadata</code> subtask. This will cause 
every field to be tagged with this default,
! //     * if the field doesn't have a fetch-depth declared. If the field has a 
fetch-depth, this one is used.
! //     *
! //     * @param fetchDepth  Either -1 to indicate that no default-fetch-depth 
should be set, or 0 for infinite depth, or a
! //     *      positive number indicating how many levels the detaching shall 
dive into the object-graph.
! //     */
! //    public void setFetchDepth(int fetchDepth)
! //    {
! //        if (fetchDepth < -1)
! //            throw new IllegalArgumentException("fetchDepth=" + fetchDepth + 
" is illegal! Must be -1 to deactivate the default-fetch-depth or a number >= 
0!");
! //
! //        this.fetchDepth = fetchDepth;
! //    }
  
      /**

Index: JdoTagsHandler.java
===================================================================
RCS file: 
/cvsroot/xdoclet/xdoclet/modules/jdo/src/xdoclet/modules/jdo/JdoTagsHandler.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -r1.12 -r1.13
*** JdoTagsHandler.java 17 Sep 2005 22:44:43 -0000      1.12
--- JdoTagsHandler.java 18 Sep 2005 23:37:51 -0000      1.13
***************
*** 7,18 ****
  import java.util.ArrayList;
  import java.util.Collection;
- import java.util.HashSet;
  import java.util.Iterator;
  import java.util.Properties;
- import java.util.Set;
  import xjavadoc.XClass;
  import xjavadoc.XDoc;
  import xjavadoc.XPackage;
- import xjavadoc.XTag;
  
  import xdoclet.SubTask;
--- 7,15 ----
***************
*** 33,48 ****
      private VendorExtension _currentExtension;
  
!     /**
!      * @see   #cacheFieldsInFetchGroups
!      */
!     private XClass  cacheFieldsInFetchGroupsClass = null;
!     /**
!      * This Set stores all fields that are declared in the current class 
(cached in [EMAIL PROTECTED]
!      * #cacheFieldsInFetchGroupsClass}) to be included in a fetch-group. If a 
field is in no fetch-group, it is not
!      * contained in this Set. This Set is null if [EMAIL PROTECTED] 
#ifCurrentFieldIsInFetchGroup(String, Properties)} has not yet
!      * been called. If [EMAIL PROTECTED] #cacheFieldsInFetchGroupsClass} 
specifies a class that is different from [EMAIL PROTECTED]
!      * XDocletTagSupport#getCurrentClass()} then this Set needs to be 
recreated.
!      */
!     private Set     cacheFieldsInFetchGroups = null;
  
      /**
--- 30,48 ----
      private VendorExtension _currentExtension;
  
! //    /**
! //     * @see   #cacheFieldsInFetchGroups
! //     */
! //    private XClass  cacheFieldsInFetchGroupsClass = null;
! //    /**
! //     * This Set stores all fields that are declared in the current class 
(cached in [EMAIL PROTECTED]
! //     * #cacheFieldsInFetchGroupsClass}) to be included in a fetch-group. If 
a field is in no fetch-group, it is not
! //     * contained in this Set. This Set is null if [EMAIL PROTECTED] 
#ifCurrentFieldIsInFetchGroup(String, Properties)} has not yet
! //     * been called. If [EMAIL PROTECTED] #cacheFieldsInFetchGroupsClass} 
specifies a class that is different from [EMAIL PROTECTED]
! //     * XDocletTagSupport#getCurrentClass()} then this Set needs to be 
recreated.
! //     */
! //    private Set     cacheFieldsInFetchGroups = null;
! 
!     private String  currentFetchGroupFieldName = null;
!     private int     currentFetchGroupFieldFetchDepth = -1;
  
      /**
***************
*** 195,231 ****
      }
  
!     public void ifCurrentFieldIsInFetchGroup(String template, Properties 
attributes) throws XDocletException
      {
!         if (cacheFieldsInFetchGroupsClass != getCurrentClass())
!             cacheFieldsInFetchGroupsClass = null;
  
!         if (cacheFieldsInFetchGroupsClass == null || cacheFieldsInFetchGroups 
== null) {
!             if (cacheFieldsInFetchGroups == null)
!                 cacheFieldsInFetchGroups = new HashSet();
!             else
!                 cacheFieldsInFetchGroups.clear();
  
!             for (Iterator it = 
getCurrentClass().getDoc().getTags("jdo.fetch-group").iterator(); it.hasNext(); 
) {
!                 XTag fgt = (XTag) it.next();
!                 String fieldStr = fgt.getAttributeValue("field-names");
  
!                 if (fieldStr != null) {
!                     String[] fieldNames = fieldStr.split(",");
  
!                     for (int i = 0; i < fieldNames.length; ++i) {
!                         String fieldName = fieldNames[i].replaceAll(" ", "");
  
!                         if (!cacheFieldsInFetchGroups.contains(fieldName))
!                             cacheFieldsInFetchGroups.add(fieldName);
!                     }
                  }
              }
!             cacheFieldsInFetchGroupsClass = getCurrentClass();
!         }
  
!         if (cacheFieldsInFetchGroups.contains(getCurrentField().getName()))
              generate(template);
      }
  
      protected void setCurrentVendorExtension(VendorExtension vendorExtension)
      {
--- 195,318 ----
      }
  
!     public String currentFetchGroupFieldName()
      {
!         if (currentFetchGroupFieldName == null)
!             throw new IllegalStateException("You cannot access the 
currentFetchGroupFieldName outside of the forAllFetchGroupFieldNames loop!");
  
!         return currentFetchGroupFieldName;
!     }
! 
!     public String currentFetchGroupFieldFetchDepth()
!     {
!         if (currentFetchGroupFieldName == null)
!             throw new IllegalStateException("You cannot access the 
currentFetchGroupFieldFetchDepth outside of the forAllFetchGroupFieldNames 
loop!");
  
!         return Integer.toString(currentFetchGroupFieldFetchDepth);
!     }
  
!     public void ifCurrentFetchGroupFieldHasFetchDepth(String template, 
Properties attributes) throws XDocletException
!     {
!         if (currentFetchGroupFieldName == null)
!             throw new IllegalStateException("You cannot use 
ifCurrentFetchGroupFieldHasFetchDepth outside of the forAllFetchGroupFieldNames 
loop!");
  
!         if (currentFetchGroupFieldFetchDepth >= 0)
!             generate(template);
!     }
  
!     /**
!      * This is used to iterate the comma-separated list of fields within a 
fetch-group (there must be a current
!      * fetch-group!). Each field may optionally be followed by 
"[fetch-depth]". <p>
!      *
!      * Example: <pre>
!      * jdo.fetch-group name="myFetchGroup" field-names="field0, field1 [3], 
field2"
!      * </pre> </p>
!      *
!      * @param template
!      * @param attributes
!      * @throws XDocletException
!      */
!     public void forAllFetchGroupFieldNames(String template, Properties 
attributes) throws XDocletException
!     {
!         if (!"jdo.fetch-group".equals(getCurrentClassTag().getName()))
!             throw new IllegalStateException("currentClassTag.name=\"" + 
getCurrentClassTag().getName() + "\" but must be \"jdo.fetch-group\"!");
! 
!         String fieldNamesString = 
getCurrentClassTag().getAttributeValue("field-names");
! 
!         if (fieldNamesString == null) {
!             // there is no field-names attribute
!             return;
!         }
! 
!         String[] fieldNames = fieldNamesString.replaceAll(" ", "").split(",");
! 
!         for (int i = 0; i < fieldNames.length; ++i) {
!             String fieldNameRaw = fieldNames[i];
! 
!             // split fieldNameRaw into fieldName + fetch-depth
!             String[] parts = fieldNameRaw.split("\\[");
!             String fieldName = parts[0];
!             int fetchDepth;
! 
!             if (parts.length == 1) {
!                 // there is no fetch-depth
!                 fetchDepth = -1;
!             }
!             else if (parts.length == 2) {
!                 String fetchDepthStr = parts[1];
! 
!                 if (!fetchDepthStr.endsWith("]"))
!                     throw new XDocletException("Attribute field-names of 
fetch-group \"" + getCurrentClassTag().getAttributeValue("name") + "\" is not 
formatted correctly! One of the fields has an open [ and misses the closing 
]!");
! 
!                 try {
!                     fetchDepth = Integer.parseInt(fetchDepthStr.substring(0, 
fetchDepthStr.length() - 1));
!                 }
!                 catch (NumberFormatException x) {
!                     throw new XDocletException("Attribute field-names of 
fetch-group \"" + getCurrentClassTag().getAttributeValue("name") + "\" is not 
formatted correctly! The text between [ and ] is not a number >= 0!");
                  }
              }
!             else
!                 throw new XDocletException("Attribute field-names of 
fetch-group \"" + getCurrentClassTag().getAttributeValue("name") + "\" is not 
formatted correctly! One of the fields has multiple occurences of [!");
  
!             currentFetchGroupFieldName = fieldName;
!             currentFetchGroupFieldFetchDepth = fetchDepth;
              generate(template);
+         }
+         currentFetchGroupFieldName = null;
+         currentFetchGroupFieldFetchDepth = -1;
      }
  
+ //    public void ifCurrentFieldIsInFetchGroup(String template, Properties 
attributes) throws XDocletException
+ //    {
+ //        if (cacheFieldsInFetchGroupsClass != getCurrentClass())
+ //            cacheFieldsInFetchGroupsClass = null;
+ //
+ //        if (cacheFieldsInFetchGroupsClass == null || 
cacheFieldsInFetchGroups == null) {
+ //            if (cacheFieldsInFetchGroups == null)
+ //                cacheFieldsInFetchGroups = new HashSet();
+ //            else
+ //                cacheFieldsInFetchGroups.clear();
+ //
+ //            for (Iterator it = 
getCurrentClass().getDoc().getTags("jdo.fetch-group").iterator(); it.hasNext(); 
) {
+ //                XTag fgt = (XTag) it.next();
+ //                String fieldStr = fgt.getAttributeValue("field-names");
+ //
+ //                if (fieldStr != null) {
+ //                    String[] fieldNames = fieldStr.split(",");
+ //
+ //                    for (int i = 0; i < fieldNames.length; ++i) {
+ //                        String fieldName = fieldNames[i].replaceAll(" ", 
"");
+ //
+ //                        if (!cacheFieldsInFetchGroups.contains(fieldName))
+ //                            cacheFieldsInFetchGroups.add(fieldName);
+ //                    }
+ //                }
+ //            }
+ //            cacheFieldsInFetchGroupsClass = getCurrentClass();
+ //        }
+ //
+ //        if (cacheFieldsInFetchGroups.contains(getCurrentField().getName()))
+ //            generate(template);
+ //    }
+ 
      protected void setCurrentVendorExtension(VendorExtension vendorExtension)
      {



-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. 
Download it for free - -and be entered to win a 42" plasma tv or your very
own Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
xdoclet-devel mailing list
xdoclet-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xdoclet-devel

Reply via email to