Kevin, This is the first attempt to fix 357 & 358. I linked 357 to 358. Also added a comment on 357 to link it to SVN revision 573750.
Please suggest/discuss what is the best way to keep SVN commit and JIRA issues linked together. Pinaki Poddar 972.834.2865 >-----Original Message----- >From: Kevin Sutter [mailto:[EMAIL PROTECTED] >Sent: Saturday, September 08, 2007 12:41 PM >To: [email protected] >Subject: Re: svn commit: r573750 - in /openjpa/trunk: >openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ >openjpa-kernel/src/main/java/org/apache/openjpa/meta/ >openjpa-persistence/src/main/java/org/apache/openjpa/persistence/ > >Was this commit for OPENJPA-358 or OPENJPA-357, or both? :-) >We need to remember to include the tag in the commit message >so that we get the SVN changes in the JIRA Issues. Thanks! > >Kevin > >On 9/7/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: >> >> Author: ppoddar >> Date: Fri Sep 7 16:08:02 2007 >> New Revision: 573750 >> >> URL: http://svn.apache.org/viewvc?rev=573750&view=rev >> Log: >> Fix for FetchGroup inclusion and recursion depth calculation. >> >> Modified: >> >> >> >openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/F >> etchConfigurationImpl.java >> >> >> >openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Fet >> chGroup.java >> >> >> >openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/per >> sistence/AnnotationPersistenceMetaDataParser.java >> >> Modified: >> >openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/F >> etchConfigurationImpl.java >> URL: >> >http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/jav >> >a/org/apache/openjpa/kernel/FetchConfigurationImpl.java?rev=573750&r1= >> 573749&r2=573750&view=diff >> >> >====================================================================== >> ======== >> --- >> >openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/F >> etchConfigurationImpl.java >> (original) >> +++ >> >openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/F >> etchConfigurationImpl.java >> Fri Sep 7 16:08:02 2007 >> @@ -604,6 +604,8 @@ >> int cur; >> for (int i = 0; max != FetchGroup.DEPTH_INFINITE >> && i < groups.length; i++) { >> + // ignore custom groups that are inactive in this >> configuration >> + if (!this.hasFetchGroup(groups[i])) continue; >> cur = >meta.getFetchGroup(groups[i]).getRecursionDepth(fm); >> if (cur == FetchGroup.DEPTH_INFINITE || cur > max) >> max = cur; >> @@ -625,7 +627,7 @@ >> return avail; >> return Math.min(max, avail); >> } >> - >> + >> /** >> * Return the relation type of the given field. >> */ >> >> Modified: >> >openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Fet >> chGroup.java >> URL: >> >http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/jav >> >a/org/apache/openjpa/meta/FetchGroup.java?rev=573750&r1=573749&r2=5737 >> 50&view=diff >> >> >====================================================================== >> ======== >> --- >> >openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Fet >> chGroup.java >> (original) >> +++ >> >openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Fet >> chGroup.java >> Fri Sep 7 16:08:02 2007 >> @@ -21,9 +21,11 @@ >> import java.io.Serializable; >> import java.util.ArrayList; >> import java.util.HashMap; >> +import java.util.HashSet; >> import java.util.Iterator; >> import java.util.List; >> import java.util.Map; >> +import java.util.Set; >> >> import org.apache.commons.lang.StringUtils; >> import org.apache.commons.lang.ObjectUtils; >> @@ -74,6 +76,7 @@ >> private final ClassMetaData _meta; >> private final boolean _readOnly; >> private List _includes; >> + private Set _containedBy; >> private Map _depths; >> private Boolean _postLoad; >> >> @@ -171,6 +174,32 @@ >> } >> } >> return false; >> + } >> + >> + /** >> + * Sets this receiver as one of the included fetch groups of the >> given >> + * parent. >> + * The parent fecth grop must include this receiver >before this call. >> + * >> + * @see #includes(String, boolean) >> + * @see #addDeclaredInclude(String) >> + */ >> + public boolean setContainedBy(FetchGroup parent) { >> + parent.addDeclaredInclude(this.getName()); >> + if (_containedBy==null) >> + _containedBy = new HashSet(); >> + return _containedBy.add(parent.getName()); >> + } >> + >> + /** >> + * Gets the name of the fetch groups in which this >receiver has been >> + * included. >> + * >> + * @see #setContainedBy(FetchGroup) >> + */ >> + public String[] getContainedBy() { >> + return (_containedBy == null) ? new String[0] >> + : (String[]) _containedBy.toArray(new >> String[_containedBy.size()]); >> } >> >> /** >> >> Modified: >> >openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/per >> sistence/AnnotationPersistenceMetaDataParser.java >> URL: >> >http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/mai >> >n/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataPar >> ser.java?rev=573750&r1=573749&r2=573750&view=diff >> >> >====================================================================== >> ======== >> --- >> >openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/per >> sistence/AnnotationPersistenceMetaDataParser.java >> (original) >> +++ >> >openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/per >> sistence/AnnotationPersistenceMetaDataParser.java >> Fri Sep 7 16:08:02 2007 >> @@ -875,6 +875,14 @@ >> >> /** >> * Create fetch groups. >> + * If FetchGroup A includes FetchGroup B, then a bi-link is set >> between >> + * A and B. Both A and B must be declared in the same Class. >> + * <br> >> + * Call [EMAIL PROTECTED] #parseFetchAttribute(ClassMetaData, >> + * org.apache.openjpa.meta.FetchGroup, FetchAttribute) >only after the >> + * bi-links have been established, because a field f will not >> + only >> add the >> + * fetch group A which explictly includes f to its custom fetch >> groups but >> + * also will also add any fetch group B that includes A. >> */ >> private void parseFetchGroups(ClassMetaData meta, FetchGroup... >> groups) { >> org.apache.openjpa.meta.FetchGroup fg; @@ -885,12 +893,25 @@ >> fg = meta.addDeclaredFetchGroup(group.name()); >> if (group.postLoad()) >> fg.setPostLoad(true); >> - for (String s : group.fetchGroups()) >> + for (String s : group.fetchGroups()) { >> fg.addDeclaredInclude(s); >> + } >> + } >> + >> + for (FetchGroup group:groups) { >> + fg = meta.getFetchGroup(group.name()); >> + String[] includedFetchGropNames = >> + fg.getDeclaredIncludes >> (); >> + for (String >> includedFectchGroupName:includedFetchGropNames) >> + meta.getFetchGroup >> (includedFectchGroupName).setContainedBy(fg); >> + } >> + >> + for (FetchGroup group : groups) { >> + fg = meta.getFetchGroup(group.name()); >> for (FetchAttribute attr : group.attributes()) >> parseFetchAttribute(meta, fg, attr); >> } >> } >> + >> >> /** >> * Set a field's fetch group. >> @@ -904,6 +925,9 @@ >> meta, attr.name())); >> >> field.setInFetchGroup(fg.getName(), true); >> + String[] parentFetchGroups = fg.getContainedBy(); >> + for (String parentFetchGroup:parentFetchGroups) >> + field.setInFetchGroup(parentFetchGroup, true); >> if (attr.recursionDepth() != Integer.MIN_VALUE) >> fg.setRecursionDepth(field, attr.recursionDepth()); >> } >> >> >> > Notice: This email message, together with any attachments, may contain information of BEA Systems, Inc., its subsidiaries and affiliated entities, that may be confidential, proprietary, copyrighted and/or legally privileged, and is intended solely for the use of the individual or entity named in this message. If you are not the intended recipient, and have received this message in error, please immediately return this by email and then delete it.
