Author: rhauch
Date: 2009-03-06 12:03:00 -0500 (Fri, 06 Mar 2009)
New Revision: 762
Modified:
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/DnaBuiltinNodeTypeSource.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/DnaLexicon.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrItemDefinition.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrLexicon.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeTypeManager.java
Log:
DNA-294 Define a custom node type for the root node in a repository
Applied the patch. Also changed the JcrNodeTypeManager.getRootNodeDefinition() method to
return "dna:root" node type (rather than "nt:unstructured").
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/DnaBuiltinNodeTypeSource.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/DnaBuiltinNodeTypeSource.java 2009-03-06
16:51:55 UTC (rev 761)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/DnaBuiltinNodeTypeSource.java 2009-03-06
17:03:00 UTC (rev 762)
@@ -29,6 +29,7 @@
import java.util.List;
import javax.jcr.PropertyType;
import javax.jcr.nodetype.NodeType;
+import org.jboss.dna.graph.JcrMixLexicon;
import net.jcip.annotations.Immutable;
/**
@@ -57,17 +58,86 @@
throw new IllegalStateException(JcrI18n.supertypeNotFound.text(baseTypeName,
namespaceTypeName));
}
+ JcrNodeType referenceable = findType(JcrMixLexicon.REFERENCEABLE);
+
+ if (referenceable == null) {
+ String baseTypeName =
JcrMixLexicon.REFERENCEABLE.getString(session.getExecutionContext().getNamespaceRegistry());
+ String namespaceTypeName =
DnaLexicon.SYSTEM.getString(session.getExecutionContext().getNamespaceRegistry());
+ throw new IllegalStateException(JcrI18n.supertypeNotFound.text(baseTypeName,
namespaceTypeName));
+ }
+
// Stubbing in child node and property definitions for now
- JcrNodeType namespace = new JcrNodeType(session, DnaLexicon.NAMESPACE,
Arrays.asList(new NodeType[] {base}),
- DnaLexicon.URI, NO_CHILD_NODES,
Arrays.asList(new JcrPropertyDefinition[] {
- new JcrPropertyDefinition(session,
null, DnaLexicon.URI,
-
OnParentVersionBehavior.VERSION.getJcrValue(),
- true, true,
true, NO_DEFAULT_VALUES,
-
PropertyType.STRING, NO_CONSTRAINTS, false)}),
+ JcrNodeType namespace = new JcrNodeType(
+ session,
+ DnaLexicon.NAMESPACE,
+ Arrays.asList(new NodeType[] {base}),
+ DnaLexicon.URI,
+ NO_CHILD_NODES,
+ Arrays.asList(new JcrPropertyDefinition[]
{new JcrPropertyDefinition(
+
session,
+
null,
+
DnaLexicon.URI,
+
OnParentVersionBehavior.VERSION.getJcrValue(),
+
true,
+
true,
+
true,
+
NO_DEFAULT_VALUES,
+
PropertyType.STRING,
+
NO_CONSTRAINTS,
+
false)}),
NOT_MIXIN, UNORDERABLE_CHILD_NODES);
- primaryNodeTypes.addAll(Arrays.asList(new JcrNodeType[] {namespace}));
+ JcrNodeType namespaces = new JcrNodeType(
+ session,
+ DnaLexicon.NAMESPACES,
+ Arrays.asList(new NodeType[] {base}),
+ NO_PRIMARY_ITEM_NAME,
+ Arrays.asList(new JcrNodeDefinition[]
{new JcrNodeDefinition(
+
session,
+
null,
+
null,
+
OnParentVersionBehavior.VERSION.getJcrValue(),
+
false,
+
false,
+
true,
+
false,
+
DnaLexicon.NAMESPACE,
+
new NodeType[] {namespace})}),
+ NO_PROPERTIES, NOT_MIXIN,
UNORDERABLE_CHILD_NODES);
+ JcrNodeType system = new JcrNodeType(
+ session,
+ DnaLexicon.SYSTEM,
+ Arrays.asList(new NodeType[] {base}),
+ NO_PRIMARY_ITEM_NAME,
+ Arrays.asList(new JcrNodeDefinition[] {new
JcrNodeDefinition(
+
session,
+
null,
+
DnaLexicon.NAMESPACES,
+
OnParentVersionBehavior.VERSION.getJcrValue(),
+
true,
+
true,
+
true,
+
false,
+
DnaLexicon.NAMESPACES,
+
new NodeType[] {namespaces})}),
+ NO_PROPERTIES, NOT_MIXIN,
UNORDERABLE_CHILD_NODES);
+
+ JcrNodeType root = new JcrNodeType(session, DnaLexicon.ROOT, Arrays.asList(new
NodeType[] {base, referenceable}),
+ NO_PRIMARY_ITEM_NAME, Arrays.asList(new
JcrNodeDefinition[] {
+ new JcrNodeDefinition(session, null,
JcrLexicon.SYSTEM,
+
OnParentVersionBehavior.IGNORE.getJcrValue(), true, true,
+ true, false,
DnaLexicon.NAMESPACES,
+ new NodeType[]
{namespaces}),
+ new JcrNodeDefinition(session, null,
null,
+
OnParentVersionBehavior.VERSION.getJcrValue(), false, false,
+ false, true,
DnaLexicon.NAMESPACES,
+ new NodeType[]
{namespaces}),
+
+ }), NO_PROPERTIES, NOT_MIXIN,
UNORDERABLE_CHILD_NODES);
+
+ primaryNodeTypes.addAll(Arrays.asList(new JcrNodeType[] {root, system,
namespaces, namespace}));
+
}
/**
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/DnaLexicon.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/DnaLexicon.java 2009-03-06 16:51:55 UTC
(rev 761)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/DnaLexicon.java 2009-03-06 17:03:00 UTC
(rev 762)
@@ -33,6 +33,8 @@
public static final Name NAMESPACES = new BasicName(Namespace.URI,
"namespaces");
public static final Name NAMESPACE = new BasicName(Namespace.URI,
"namespace");
+ public static final Name ROOT = new BasicName(Namespace.URI, "root");
+ public static final Name SYSTEM = new BasicName(Namespace.URI, "system");
public static final Name URI = new BasicName(Namespace.URI, "uri");
public static final Name NODE_DEFINITON = new BasicName(Namespace.URI,
"nodeDefinition");
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrItemDefinition.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrItemDefinition.java 2009-03-06
16:51:55 UTC (rev 761)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrItemDefinition.java 2009-03-06
17:03:00 UTC (rev 762)
@@ -29,8 +29,8 @@
import org.jboss.dna.graph.property.Name;
/**
- * DNA implementation of the {@link ItemDefinition} interface. This implementation is
immutable and has all fields initialized
- * through its constructor.
+ * DNA implementation of the {@link ItemDefinition} interface. This implementation is
immutable and has all fields initialized
+ * through its constructor.
*/
@Immutable
class JcrItemDefinition implements ItemDefinition {
@@ -77,7 +77,7 @@
*/
public String getName() {
if (name == null) {
- return "*";
+ return JcrNodeType.RESIDUAL_ITEM_NAME;
}
return name.getString(session.getExecutionContext().getNamespaceRegistry());
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrLexicon.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrLexicon.java 2009-03-06 16:51:55 UTC
(rev 761)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrLexicon.java 2009-03-06 17:03:00 UTC
(rev 762)
@@ -63,6 +63,7 @@
public static final Name PROTECTED = new BasicName(Namespace.URI,
"protected");
public static final Name REQUIRED_PRIMARY_TYPES = new BasicName(Namespace.URI,
"requiredPrimaryTypes");
public static final Name REQUIRED_TYPE = new BasicName(Namespace.URI,
"requiredType");
+ public static final Name ROOT = new BasicName(Namespace.URI, "root");
public static final Name ROOT_VERSION = new BasicName(Namespace.URI,
"rootVersion");
public static final Name SAME_NAME_SIBLINGS = new BasicName(Namespace.URI,
"sameNameSiblings");
public static final Name STATEMENT = new BasicName(Namespace.URI,
"statement");
@@ -73,5 +74,7 @@
public static final Name VERSIONABLE_UUID = new BasicName(Namespace.URI,
"versionableUuid");
public static final Name VERSION_HISTORY = new BasicName(Namespace.URI,
"versionHistory");
public static final Name VERSION_LABELS = new BasicName(Namespace.URI,
"versionLabels");
+ public static final Name XMLTEXT = new BasicName(Namespace.URI,
"xmltext");
+ public static final Name XMLCHARACTERS = new BasicName(Namespace.URI,
"xmlcharacters");
}
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeTypeManager.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeTypeManager.java 2009-03-06
16:51:55 UTC (rev 761)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeTypeManager.java 2009-03-06
17:03:00 UTC (rev 762)
@@ -134,8 +134,7 @@
* @throws NoSuchNodeTypeException
*/
JcrNodeDefinition getRootNodeDefinition() throws NoSuchNodeTypeException,
RepositoryException {
- // TODO: Fix this
- for (NodeDefinition definition :
getNodeType("nt:unstructured").getChildNodeDefinitions()) {
+ for (NodeDefinition definition :
getNodeType(DnaLexicon.ROOT).getChildNodeDefinitions()) {
if (definition.getName().equals(JcrNodeType.RESIDUAL_ITEM_NAME)) return
(JcrNodeDefinition)definition;
}
assert false; // should not get here