CVS: xdoclet/modules/jdo/src/xdoclet/modules/jdo JdoXmlMetadataSubTask.java,1.16,1.17 JdoTagsHandler.java,1.12,1.13

Marco Schulze <[email protected]>
Newsgroups gmane.comp.java.xdoclet.devel
Message-ID <[email protected]>
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 {@link #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 {@link #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 {@link
!      * #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 {@link #ifCurrentFieldIsInFetchGroup(String, Properties)} has not yet
!      * been called. If {@link #cacheFieldsInFetchGroupsClass} specifies a class that is different from {@link
!      * 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 {@link
! //     * #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 {@link #ifCurrentFieldIsInFetchGroup(String, Properties)} has not yet
! //     * been called. If {@link #cacheFieldsInFetchGroupsClass} specifies a class that is different from {@link
! //     * 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.