Author: ppoddar
Date: Fri Jan 21 00:07:20 2011
New Revision: 1061582
URL: http://svn.apache.org/viewvc?rev=1061582&view=rev
Log:
OPENJPA-1050: use generics for FetchGroup
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FetchGroup.java
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java?rev=1061582&r1=1061581&r2=1061582&view=diff
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
Fri Jan 21 00:07:20 2011
@@ -2295,36 +2295,36 @@ public class ClassMetaData
* Return the fetch groups declared explicitly in this type.
*/
public FetchGroup[] getDeclaredFetchGroups() {
- if (_fgs == null)
- _fgs = (_fgMap == null) ? EMPTY_FETCH_GROUP_ARRAY : (FetchGroup[])
- _fgMap.values().toArray(new FetchGroup[_fgMap.size()]);
+ if (_fgs == null) {
+ _fgs = (_fgMap == null) ? EMPTY_FETCH_GROUP_ARRAY :
_fgMap.values().toArray(new FetchGroup[_fgMap.size()]);
+ }
return _fgs;
}
/**
- * Return all fetch groups for this type, including superclass groups.
+ * Return all fetch groups for this type, including superclass groups but
excluding the standard groups
+ * such as "default" or "all".
*/
public FetchGroup[] getCustomFetchGroups() {
if (_customFGs == null) {
// map fetch groups to names, allowing our groups to override super
Map<String,FetchGroup> fgs = new HashMap<String,FetchGroup>();
ClassMetaData sup = getPCSuperclassMetaData();
- if (sup != null)
- {
+ if (sup != null) {
FetchGroup[] supFGs = sup.getCustomFetchGroups();
- for (int i = 0; i < supFGs.length; i++)
+ for (int i = 0; i < supFGs.length; i++) {
fgs.put(supFGs[i].getName(), supFGs[i]);
+ }
}
FetchGroup[] decs = getDeclaredFetchGroups();
- for (int i = 0; i < decs.length; i++)
+ for (int i = 0; i < decs.length; i++) {
fgs.put(decs[i].getName(), decs[i]);
-
+ }
// remove standard groups
fgs.remove(FetchGroup.NAME_DEFAULT);
fgs.remove(FetchGroup.NAME_ALL);
- _customFGs = (FetchGroup[]) fgs.values().toArray
- (new FetchGroup[fgs.size()]);
+ _customFGs = fgs.values().toArray(new FetchGroup[fgs.size()]);
}
return _customFGs;
}
@@ -2338,7 +2338,7 @@ public class ClassMetaData
* receiver or any of its superclasses. Otherwise null.
*/
public FetchGroup getFetchGroup(String name) {
- FetchGroup fg = (_fgMap == null) ? null : (FetchGroup)
_fgMap.get(name);
+ FetchGroup fg = (_fgMap == null) ? null : _fgMap.get(name);
if (fg != null)
return fg;
ClassMetaData sup = getPCSuperclassMetaData();
@@ -2363,7 +2363,7 @@ public class ClassMetaData
throw new MetaDataException(_loc.get("empty-fg-name", this));
if (_fgMap == null)
_fgMap = new HashMap<String,FetchGroup>();
- FetchGroup fg = (FetchGroup) _fgMap.get(name);
+ FetchGroup fg = _fgMap.get(name);
if (fg == null) {
fg = new FetchGroup(this, name);
_fgMap.put(name, fg);
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FetchGroup.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FetchGroup.java?rev=1061582&r1=1061581&r2=1061582&view=diff
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FetchGroup.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FetchGroup.java
Fri Jan 21 00:07:20 2011
@@ -23,7 +23,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -34,8 +33,14 @@ import org.apache.openjpa.lib.util.Local
import org.apache.openjpa.util.MetaDataException;
/**
- * Captures fetch group metadata.
+ * Captures fetch group meta-data.
+ *
+ * Fetch Group is identified and referred by its immutable name.
+ * Fetch Group can nest other groups. The nested group reference is the name
of the nested group.
+ *
+ * Defines two <em>standard</em> fetch group named <tt>default</tt> and
<tt>all</tt>.
*/
+@SuppressWarnings("serial")
public class FetchGroup
implements Serializable {
@@ -69,20 +74,21 @@ public class FetchGroup
*/
static final FetchGroup ALL = new FetchGroup(NAME_ALL, false);
- private static final Localizer _loc = Localizer.forPackage
- (FetchGroup.class);
+ private static final FieldMetaData[] EMPTY_FIELD_ARRAY = {};
+ private static final Localizer _loc =
Localizer.forPackage(FetchGroup.class);
- private final String _name;
+ private final String _name;
private final ClassMetaData _meta;
- private final boolean _readOnly;
- private List _includes;
- private Set _containedBy;
- private Map _depths;
- private Boolean _postLoad;
+ private final boolean _readOnly;
+ private List<String> _includes;
+ private Set<String> _containedBy;
+ private Map<FieldMetaData,Number> _depths;
+ private Boolean _postLoad;
/**
* Constructor; supply immutable name.
*
+ * @param cm class meta data that owns this group. Can be null for
standard groups.
* @param name must not by null or empty.
*/
FetchGroup(ClassMetaData cm, String name) {
@@ -92,7 +98,7 @@ public class FetchGroup
}
/**
- * Internal constructor for builtin fetch groups.
+ * Internal constructor for built-in fetch groups.
*/
private FetchGroup(String name, boolean postLoad) {
_meta = null;
@@ -105,23 +111,22 @@ public class FetchGroup
* Copy state from the given fetch group.
*/
void copy(FetchGroup fg) {
- if (fg._includes != null)
- for (Iterator itr = fg._includes.iterator(); itr.hasNext();)
- addDeclaredInclude((String) itr.next());
- if (fg._containedBy != null)
- this._containedBy = new HashSet(fg._containedBy);
-
+ if (fg._includes != null) {
+ for (String included : fg._includes) {
+ addDeclaredInclude(included);
+ }
+ }
+ if (fg._containedBy != null) {
+ this._containedBy = new HashSet<String>(fg._containedBy);
+ }
if (fg._depths != null) {
- Map.Entry entry;
- for (Iterator itr = fg._depths.entrySet().iterator();
- itr.hasNext();) {
- entry = (Map.Entry) itr.next();
- setRecursionDepth((FieldMetaData) entry.getKey(), ((Number)
- entry.getValue()).intValue());
+ for (Map.Entry<FieldMetaData,Number> entry :
fg._depths.entrySet()) {
+ setRecursionDepth(entry.getKey(), entry.getValue().intValue());
}
}
- if (fg._postLoad != null)
+ if (fg._postLoad != null) {
_postLoad = fg._postLoad;
+ }
}
/**
@@ -140,7 +145,7 @@ public class FetchGroup
if (StringUtils.isEmpty(fgName))
throw new MetaDataException(_loc.get("null-include-fg", this));
if (_includes == null)
- _includes = new ArrayList();
+ _includes = new ArrayList<String>();
if (!_includes.contains(fgName))
_includes.add(fgName);
}
@@ -158,12 +163,13 @@ public class FetchGroup
if (_includes != null) {
if (_includes.contains(fgName))
return true;
- if (recurse && _meta!=null) {
+ if (recurse && _meta !=null) {
FetchGroup fg;
- for (Iterator i = _includes.iterator(); i.hasNext();) {
- fg = _meta.getFetchGroup((String) i.next());
- if (fg != null && fg.includes(fgName, true))
+ for (String included : _includes) {
+ fg = _meta.getFetchGroup(included);
+ if (fg != null && fg.includes(fgName, true)) {
return true;
+ }
}
}
}
@@ -182,7 +188,7 @@ public class FetchGroup
/**
* Adds this receiver as one of the included fetch groups of the given
* parent.
- * The parent fecth group will include this receiver as a side-effect of
+ * The parent fetch group will include this receiver as a side-effect of
* this call.
*
* @see #includes(String, boolean)
@@ -194,7 +200,7 @@ public class FetchGroup
public boolean addContainedBy(FetchGroup parent) {
parent.addDeclaredInclude(this.getName());
if (_containedBy==null)
- _containedBy = new HashSet();
+ _containedBy = new HashSet<String>();
return _containedBy.add(parent.getName());
}
@@ -205,9 +211,10 @@ public class FetchGroup
* @see #addContainedBy(FetchGroup)
* @since 1.1.0
*/
- public Set getContainedBy() {
- return (_containedBy == null) ? Collections.EMPTY_SET :
- Collections.unmodifiableSet(_containedBy);
+ public Set<String> getContainedBy() {
+ if (_containedBy == null)
+ return Collections.emptySet();
+ return Collections.unmodifiableSet(_containedBy);
}
/**
@@ -215,8 +222,7 @@ public class FetchGroup
*/
public String[] getDeclaredIncludes() {
// only used during serialization; no need to cache
- return (_includes == null) ? new String[0]
- : (String[]) _includes.toArray(new String[_includes.size()]);
+ return (_includes == null) ? new String[0] : _includes.toArray(new
String[_includes.size()]);
}
/**
@@ -230,7 +236,7 @@ public class FetchGroup
throw new MetaDataException(_loc.get("invalid-fg-depth", _name,
fm,
depth));
if (_depths == null)
- _depths = new HashMap();
+ _depths = new HashMap<FieldMetaData, Number>();
_depths.put(fm, depth);
}
@@ -248,7 +254,7 @@ public class FetchGroup
* 0 if none.
*/
public int getDeclaredRecursionDepth(FieldMetaData fm) {
- Number depth = (_depths == null) ? null : (Number) _depths.get(fm);
+ Number depth = (_depths == null) ? null : _depths.get(fm);
return (depth == null) ? 0 : depth.intValue();
}
@@ -256,7 +262,7 @@ public class FetchGroup
* Helper to find recursion depth recursively in our includes.
*/
private Number findRecursionDepth(FieldMetaData fm) {
- Number depth = (_depths == null) ? null : (Number) _depths.get(fm);
+ Number depth = (_depths == null) ? null : _depths.get(fm);
if (depth != null)
return depth;
@@ -275,11 +281,10 @@ public class FetchGroup
// find largest included depth
FetchGroup fg;
- for (Iterator itr = _includes.iterator(); itr.hasNext();) {
- fg = _meta.getFetchGroup((String) itr.next());
+ for (String included : _includes) {
+ fg = _meta.getFetchGroup(included);
depth = (fg == null) ? null : fg.findRecursionDepth(fm);
- if (depth != null && (max == null
- || depth.intValue() > max.intValue()))
+ if (depth != null && (max == null || depth.intValue() >
max.intValue()))
max = depth;
}
return max;
@@ -291,9 +296,8 @@ public class FetchGroup
public FieldMetaData[] getDeclaredRecursionDepthFields() {
// used in serialization only; no need to cache
if (_depths == null)
- return new FieldMetaData[0];
- return (FieldMetaData[]) _depths.keySet().toArray
- (new FieldMetaData[_depths.size()]);
+ return EMPTY_FIELD_ARRAY;
+ return _depths.keySet().toArray(new FieldMetaData[_depths.size()]);
}
/**
@@ -326,8 +330,8 @@ public class FetchGroup
if (_includes == null)
return false;
FetchGroup fg;
- for (Iterator itr = _includes.iterator(); itr.hasNext();) {
- fg = _meta.getFetchGroup((String) itr.next());
+ for (String included : _includes) {
+ fg = _meta.getFetchGroup(included);
if (fg != null && fg.isPostLoad())
return true;
}
@@ -342,23 +346,20 @@ public class FetchGroup
}
/**
- * Resolve and validate fetch group metadata.
+ * Resolve and validate fetch group meta-data.
*/
public void resolve() {
if (_includes == null)
return;
// validate includes
- String name;
FetchGroup fg;
- for (Iterator itr = _includes.iterator(); itr.hasNext();) {
- name = (String) itr.next();
+ for (String name : _includes) {
if (name.equals(_name))
throw new MetaDataException(_loc.get("cyclic-fg", this, name));
fg = _meta.getFetchGroup(name);
if (fg == null)
- throw new MetaDataException(_loc.get("bad-fg-include", this,
- name));
+ throw new MetaDataException(_loc.get("bad-fg-include", this,
name));
if (fg.includes(_name, true))
throw new MetaDataException(_loc.get("cyclic-fg", this, name));
}