001: /**
002: * Speedo: an implementation of JDO compliant personality on top of JORM generic
003: * I/O sub-system.
004: * Copyright (C) 2001-2004 France Telecom R&D
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2 of the License, or (at your option) any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: *
021: *
022: * Contact: speedo@objectweb.org
023: *
024: */package org.objectweb.speedo.metadata;
025:
026: import java.util.Map;
027: import java.util.HashMap;
028: import java.util.Iterator;
029: import java.util.Set;
030: import java.util.HashSet;
031:
032: /**
033: * @author Y.Bersihand
034: */
035: public class SpeedoFetchGroup extends SpeedoElement {
036:
037: public static final String FG_AT = "@";
038: public static final String FG_SHARP = "#";
039: public static final String FG_DOT = ".";
040: public static final String FG_KEY = "#key";
041: public static final String FG_VALUE = "#value";
042: public static final String FG_ELEMENT = "#element";
043: public static final String FG_SLASH = "/";
044:
045: public static final byte NOTHING_DEFINED = 0;
046: public static final byte DEPTH_DEFINED = 1;
047: public static final byte FG_DEFINED = 2;
048:
049: /**
050: * The name of the fetch group.
051: */
052: public String name;
053:
054: /**
055: * The list of nested fetchgroups.
056: */
057: protected Map nestedFetchGroups = new HashMap();
058:
059: /**
060: * The list of fields declared to be in this fetch group.
061: */
062: protected Map fields = new HashMap();
063:
064: /**
065: * Recursive fetch group references are controlled by the depth attribute. A
066: * depth of 0 (the default) will fetch the whole graph of instances
067: * reachable from this field.
068: */
069: public int depth = 0;
070:
071: /**
072: * The post-load attribute on the fetch-group element indicates whether the
073: * jdoPost-Load callback will be made when the fetch group is loaded. It
074: * defaults to false, for all fetch groups except the default fetch group,
075: * on which it defaults to true.
076: */
077: public boolean postLoad;
078:
079: /**
080: * @return Return the depth.
081: */
082: public int getDepth() {
083: return depth;
084: }
085:
086: /**
087: * @return Returns the name of the fetchgroup
088: */
089: public String getName() {
090: return name;
091: }
092:
093: /**
094: * @return Returns the postLoad.
095: */
096: public boolean getPostLoad() {
097: return postLoad;
098: }
099:
100: /**
101: * @return Return the map of fields.
102: */
103: public Map getFields() {
104: return fields;
105: }
106:
107: /**
108: * @return Returns the map of nested fetch groups
109: */
110: public Map getNestedFetchGroups() {
111: return nestedFetchGroups;
112: }
113:
114: /**
115: * Add a new FetchGroupMetaData
116: * @param fetchGroup is the group to add
117: */
118: public void addFetchGroup(Object fetchGroup) {
119: SpeedoFetchGroup speedoFetchGroup = (SpeedoFetchGroup) fetchGroup;
120: nestedFetchGroups.put(speedoFetchGroup.name, speedoFetchGroup);
121: }
122:
123: /**
124: * Add a new SpeedoField
125: * @param field is the field to add
126: */
127: public void addField(Object field) {
128: SpeedoField speedoField = (SpeedoField) field;
129: fields.put(speedoField.name, speedoField);
130: }
131:
132: /**
133: * @return the set of the names of the fields to load with this fetchgroup
134: */
135: public Set getFieldsToLoad() {
136: Set fieldsToLoad = new HashSet();
137: //add all the fields present in the jdoFields
138: fieldsToLoad.addAll(fields.keySet());
139: //recursive call on all the nested fetch groups
140: Set fg = nestedFetchGroups.entrySet();
141: Iterator it = fg.iterator();
142: while (it.hasNext()) {
143: SpeedoFetchGroup sfg = (SpeedoFetchGroup) it.next();
144: fieldsToLoad.addAll(sfg.fields.keySet());
145: }
146: return fieldsToLoad;
147: }
148:
149: public String toString() {
150: String s = "\n fetchgroup name: " + name + ", postload: "
151: + postLoad + ", depth: " + depth;
152: s += ", \t fields:[";
153: Iterator it = fields.values().iterator();
154: while (it.hasNext()) {
155: s = s + "\t" + it.next().toString();
156: }
157: s += "], \t nestedFetchGroups:[";
158: Iterator it2 = nestedFetchGroups.values().iterator();
159: while (it2.hasNext()) {
160: s += "\t" + it2.next().toString();
161: }
162: s += "]";
163: return s;
164: }
165: }
|