stefan 2004/07/07 09:06:40
Modified: proposals/jcrri/src/org/apache/slide/jcr/core/nodetype
NodeTypeDef.java NodeTypeManagerImpl.java
NodeTypeRegistry.java
Log:
jcrri
Revision Changes Path
1.6 +3 -3
jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeDef.java
Index: NodeTypeDef.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeDef.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- NodeTypeDef.java 30 Jun 2004 14:39:37 -0000 1.5
+++ NodeTypeDef.java 7 Jul 2004 16:06:40 -0000 1.6
@@ -30,7 +30,7 @@
import java.util.Set;
/**
- * A <code>NodeTypeDef</code> holds the definition of a nodetype.
+ * A <code>NodeTypeDef</code> holds the definition of a node type.
*
* @author Stefan Guggisberg
* @version $Revision$, $Date$
1.5 +26 -2
jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeManagerImpl.java
Index: NodeTypeManagerImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeManagerImpl.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- NodeTypeManagerImpl.java 29 Jun 2004 17:11:47 -0000 1.4
+++ NodeTypeManagerImpl.java 7 Jul 2004 16:06:40 -0000 1.5
@@ -82,6 +82,30 @@
}
/**
+ * @param id
+ * @return
+ */
+ public NodeDef getNodeDef(NodeDefId id) {
+ ChildNodeDef cnd = ntReg.getNodeDef(id);
+ if (cnd == null) {
+ return null;
+ }
+ return new NodeDefImpl(cnd, this, nsResolver);
+ }
+
+ /**
+ * @param id
+ * @return
+ */
+ public PropertyDef getPropDef(PropDefId id) {
+ PropDef pd = ntReg.getPropDef(id);
+ if (pd == null) {
+ return null;
+ }
+ return new PropertyDefImpl(pd, this, nsResolver);
+ }
+
+ /**
* @param name
* @return
* @throws NoSuchNodeTypeException
1.6 +85 -5
jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeRegistry.java
Index: NodeTypeRegistry.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeRegistry.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- NodeTypeRegistry.java 30 Jun 2004 14:39:37 -0000 1.5
+++ NodeTypeRegistry.java 7 Jul 2004 16:06:40 -0000 1.6
@@ -88,6 +88,11 @@
// map of node type names and node type definitions
private final HashMap registeredNTDefs;
+ // map of id's and property definitions
+ private final HashMap propDefs;
+ // map of id's and node definitions
+ private final HashMap nodeDefs;
+
// namespace registry for resolving prefixes and namespace URI's;
// used for (de)serializing node type definitions
private final NamespaceRegistryImpl nsReg;
@@ -136,6 +141,8 @@
entCache = new EffectiveNodeTypeCache();
registeredNTDefs = new HashMap();
+ propDefs = new HashMap();
+ nodeDefs = new HashMap();
// load and register pre-defined (i.e. built-in) node types
builtInNTDefs = new NodeTypeDefStore();
@@ -272,6 +279,20 @@
}
registeredNTDefs.put(name, ntd);
+ // store poperty & child node definitions of new node type by id
+ PropDef[] pda = ntd.getPropertyDefs();
+ for (int i = 0; i < pda.length; i++) {
+ PropDef def = pda[i];
+ PropDefId id = new PropDefId(def);
+ propDefs.put(id, def);
+ }
+ ChildNodeDef[] nda = ntd.getChildNodeDefs();
+ for (int i = 0; i < nda.length; i++) {
+ ChildNodeDef def = nda[i];
+ NodeDefId id = new NodeDefId(def);
+ nodeDefs.put(id, def);
+ }
+
return ent;
}
@@ -843,10 +864,23 @@
throw new RepositoryException("not yet implemented");
}
+ NodeTypeDef ntd = (NodeTypeDef) registeredNTDefs.get(name);
registeredNTDefs.remove(name);
// remove effective node type from aggregates cache
entCache.remove(new QName[]{name});
+ // remove poperty & child node definitions
+ PropDef[] pda = ntd.getPropertyDefs();
+ for (int i = 0; i < pda.length; i++) {
+ PropDefId id = new PropDefId(pda[i]);
+ propDefs.remove(id);
+ }
+ ChildNodeDef[] nda = ntd.getChildNodeDefs();
+ for (int i = 0; i < nda.length; i++) {
+ NodeDefId id = new NodeDefId(nda[i]);
+ nodeDefs.remove(id);
+ }
+
// persist removal of node type definition
customNTDefs.remove(name);
try {
@@ -911,7 +945,15 @@
if (!registeredNTDefs.containsKey(nodeTypeName)) {
throw new NoSuchNodeTypeException(nodeTypeName.toString());
}
- return (NodeTypeDef) registeredNTDefs.get(nodeTypeName);
+ NodeTypeDef def = (NodeTypeDef) registeredNTDefs.get(nodeTypeName);
+ // return clone to make sure nobody messes around with the 'real' definition
+ try {
+ return (NodeTypeDef) def.clone();
+ } catch (CloneNotSupportedException e) {
+ // should never get here
+ log.fatal("internal error", e);
+ throw new InternalError(e.getMessage());
+ }
}
/**
@@ -922,6 +964,44 @@
return registeredNTDefs.containsKey(nodeTypeName);
}
+ /**
+ * @param id
+ * @return
+ */
+ public ChildNodeDef getNodeDef(NodeDefId id) {
+ ChildNodeDef def = (ChildNodeDef) nodeDefs.get(id);
+ if (def == null) {
+ return null;
+ }
+ // return clone to make sure nobody messes around with the 'real' definition
+ try {
+ return (ChildNodeDef) def.clone();
+ } catch (CloneNotSupportedException e) {
+ // should never get here
+ log.fatal("internal error", e);
+ throw new InternalError(e.getMessage());
+ }
+ }
+
+ /**
+ * @param id
+ * @return
+ */
+ public PropDef getPropDef(PropDefId id) {
+ PropDef def = (PropDef) propDefs.get(id);
+ if (def == null) {
+ return null;
+ }
+ // return clone to make sure nobody messes around with the 'real' definition
+ try {
+ return (PropDef) def.clone();
+ } catch (CloneNotSupportedException e) {
+ // should never get here
+ log.fatal("internal error", e);
+ throw new InternalError(e.getMessage());
+ }
+ }
+
//----------------------------------------------------------< diagnostics >
/**
* Dumps the state of this <code>NodeTypeManager</code> instance.
@@ -948,7 +1028,7 @@
PropDef pd[] = ntd.getPropertyDefs();
for (int i = 0; i < pd.length; i++) {
ps.print("\tPropertyDef");
- ps.println(" (declared in " + pd[i].getDeclaringNodeType() + ")");
+ ps.println(" (declared in " + pd[i].getDeclaringNodeType() + ") id=" +
new PropDefId(pd[i]));
ps.println("\t\tName\t\t" + pd[i].getName());
String type = pd[i].getRequiredType() == 0 ? "null" :
PropertyType.nameFromValue(pd[i].getRequiredType());
ps.println("\t\tRequiredType\t\t" + type);
@@ -970,7 +1050,7 @@
ChildNodeDef nd[] = ntd.getChildNodeDefs();
for (int i = 0; i < nd.length; i++) {
ps.print("\tNodeDef");
- ps.println(" (declared in " + nd[i].getDeclaringNodeType() + ")");
+ ps.println(" (declared in " + nd[i].getDeclaringNodeType() + ") id=" +
new NodeDefId(nd[i]));
ps.println("\t\tName\t" + nd[i].getName());
QName[] reqPrimaryTypes = nd[i].getRequiredPrimaryTypes();
if (reqPrimaryTypes != null && reqPrimaryTypes.length > 0) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]