Author: rhauch
Date: 2009-03-20 14:40:19 -0400 (Fri, 20 Mar 2009)
New Revision: 785
Added:
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/RepositoryNodeTypeManager.java
Modified:
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNodeTypeSource.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrProperty.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/DnaBuiltinNodeTypeSource.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrBuiltinNodeTypeSource.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrItemDefinition.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeDefinition.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeType.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeTypeManager.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrPropertyDefinition.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrRepository.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrSession.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrValue.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrWorkspace.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/SessionCache.java
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrNodeTest.java
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrPropertyDefinitionTest.java
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrSessionTest.java
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrValueTest.java
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/SessionCacheTest.java
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/TestNodeTypeSource.java
Log:
DNA-302 Make JcrNodeTypeManager not dependent on JcrSession
Applied the patch, which splits JcrNodeTypeManager into repository-scoped functionality
(RepositoryNodeTypeManager) and session-scoped functionality (JcrNodeTypeManager) with the
key difference being that the session-scoped node type manager is able to translate names
based on transient namespace remappings.
The RepositoryNodeTypeManager is the maintainer of node type information for the entire
repository at run-time. The
repository manager maintains a list of all node types and the ability to retrieve node
types by Name.
The JCR 1.0 and 2.0 specifications both require that node type information be shared
across all sessions within a
repository and that the javax.jcr.NodeTypeManager perform operations based on the string
versions of Names based
on the permanent (workspace-scoped) and transient (session-scoped) namespace mappings. DNA
achieves this by
maintaining a single master repository of all node type information (the
RepositoryNodeTypeManager) and per-session
wrappers (JcrNodeTypeManager) for this master repository that perform String to Name
translation based on the
javax.jcr.Session's transient mappings and then delegating node type lookups to the
repository manager.
Also removed JcrSession references from all the type-related objects and replaced them
with ExecutionContexts.
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java 2009-03-20 18:22:45
UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java 2009-03-20 18:40:19
UTC (rev 785)
@@ -100,14 +100,11 @@
*/
public final String getUUID() throws RepositoryException {
// Return "jcr:uuid" only if node is referenceable
- Property mixinsProp = getProperty(JcrLexicon.MIXIN_TYPES);
- if (mixinsProp != null) {
- String referenceableMixinName =
JcrMixLexicon.REFERENCEABLE.getString(namespaces());
- for (Value value : mixinsProp.getValues()) {
- if (referenceableMixinName.equals(value.getString())) return
nodeUuid.toString();
- }
+ String referenceableTypeName =
JcrMixLexicon.REFERENCEABLE.getString(namespaces());
+ if (!isNodeType(referenceableTypeName)) {
+ throw new UnsupportedRepositoryOperationException();
}
- throw new UnsupportedRepositoryOperationException();
+ return nodeUuid.toString();
}
/**
@@ -171,7 +168,7 @@
* @see javax.jcr.Node#getMixinNodeTypes()
*/
public NodeType[] getMixinNodeTypes() throws RepositoryException {
- NodeTypeManager nodeTypeManager = session().getWorkspace().getNodeTypeManager();
+ NodeTypeManager nodeTypeManager = session().nodeTypeManager();
Property mixinTypesProperty = getProperty(JcrLexicon.MIXIN_TYPES);
if (mixinTypesProperty == null) return EMPTY_NODE_TYPES;
List<NodeType> mixinNodeTypes = new LinkedList<NodeType>();
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNodeTypeSource.java
===================================================================
---
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNodeTypeSource.java 2009-03-20
18:22:45 UTC (rev 784)
+++
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNodeTypeSource.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -57,6 +57,9 @@
protected static final boolean ORDERABLE_CHILD_NODES = true;
protected static final boolean UNORDERABLE_CHILD_NODES = false;
+ /** Link to the repository node type manager to which the nodes defined in this
source belong. */
+ protected static final RepositoryNodeTypeManager NO_NODE_TYPE_MANAGER = null;
+
/** The predecessor node type source. */
private final JcrNodeTypeSource predecessor;
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrProperty.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrProperty.java 2009-03-20
18:22:45 UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrProperty.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -78,7 +78,7 @@
}
JcrValue createValue( Object value ) throws RepositoryException {
- return new JcrValue(context().getValueFactories(),
propertyInfo().getPropertyType(), value);
+ return new JcrValue(context().getValueFactories(), this.cache,
propertyInfo().getPropertyType(), value);
}
@Override
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-20
18:22:45 UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/DnaBuiltinNodeTypeSource.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -30,6 +30,7 @@
import javax.jcr.PropertyType;
import javax.jcr.nodetype.NodeType;
import net.jcip.annotations.Immutable;
+import org.jboss.dna.graph.ExecutionContext;
import org.jboss.dna.graph.JcrMixLexicon;
/**
@@ -43,7 +44,7 @@
/** The list of mixin node types. */
private final List<JcrNodeType> mixinNodeTypes;
- DnaBuiltinNodeTypeSource( JcrSession session,
+ DnaBuiltinNodeTypeSource( ExecutionContext context,
JcrNodeTypeSource predecessor ) {
super(predecessor);
@@ -53,28 +54,29 @@
JcrNodeType base = findType(JcrNtLexicon.BASE);
if (base == null) {
- String baseTypeName =
JcrNtLexicon.BASE.getString(session.getExecutionContext().getNamespaceRegistry());
- String namespaceTypeName =
DnaLexicon.NAMESPACE.getString(session.getExecutionContext().getNamespaceRegistry());
+ String baseTypeName =
JcrNtLexicon.BASE.getString(context.getNamespaceRegistry());
+ String namespaceTypeName =
DnaLexicon.NAMESPACE.getString(context.getNamespaceRegistry());
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());
+ String baseTypeName =
JcrMixLexicon.REFERENCEABLE.getString(context.getNamespaceRegistry());
+ String namespaceTypeName =
DnaLexicon.SYSTEM.getString(context.getNamespaceRegistry());
throw new IllegalStateException(JcrI18n.supertypeNotFound.text(baseTypeName,
namespaceTypeName));
}
// Stubbing in child node and property definitions for now
JcrNodeType namespace = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
DnaLexicon.NAMESPACE,
Arrays.asList(new NodeType[] {base}),
DnaLexicon.URI,
NO_CHILD_NODES,
Arrays.asList(new JcrPropertyDefinition[]
{new JcrPropertyDefinition(
-
session,
+
context,
null,
DnaLexicon.URI,
OnParentVersionBehavior.VERSION.getJcrValue(),
@@ -88,12 +90,13 @@
NOT_MIXIN, UNORDERABLE_CHILD_NODES);
JcrNodeType namespaces = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
DnaLexicon.NAMESPACES,
Arrays.asList(new NodeType[] {base}),
NO_PRIMARY_ITEM_NAME,
Arrays.asList(new JcrNodeDefinition[]
{new JcrNodeDefinition(
-
session,
+
context,
null,
null,
OnParentVersionBehavior.VERSION.getJcrValue(),
@@ -106,12 +109,13 @@
NO_PROPERTIES, NOT_MIXIN,
UNORDERABLE_CHILD_NODES);
JcrNodeType system = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
DnaLexicon.SYSTEM,
Arrays.asList(new NodeType[] {base}),
NO_PRIMARY_ITEM_NAME,
Arrays.asList(new JcrNodeDefinition[] {new
JcrNodeDefinition(
-
session,
+
context,
null,
DnaLexicon.NAMESPACES,
OnParentVersionBehavior.VERSION.getJcrValue(),
@@ -123,25 +127,18 @@
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.SYSTEM, new NodeType[] {system}),
- new JcrNodeDefinition(session, null,
ALL_NODES,
-
OnParentVersionBehavior.VERSION.getJcrValue(), false, false,
- false, true,
JcrNtLexicon.UNSTRUCTURED,
- new NodeType[]
{base}),
+ JcrNodeType root = new JcrNodeType(context, NO_NODE_TYPE_MANAGER,
DnaLexicon.ROOT, Arrays.asList(new NodeType[] {base,
+ referenceable}), NO_PRIMARY_ITEM_NAME, Arrays.asList(new JcrNodeDefinition[]
{
+ new JcrNodeDefinition(context, null, JcrLexicon.SYSTEM,
OnParentVersionBehavior.IGNORE.getJcrValue(), true, true,
+ true, false, DnaLexicon.SYSTEM, new NodeType[]
{system}),
+ new JcrNodeDefinition(context, null, ALL_NODES,
OnParentVersionBehavior.VERSION.getJcrValue(), false, false, false,
+ true, JcrNtLexicon.UNSTRUCTURED, new NodeType[]
{base}),
- }), Arrays.asList(new JcrPropertyDefinition[]
{
- new JcrPropertyDefinition(session, null,
ALL_NODES,
-
OnParentVersionBehavior.COPY.getJcrValue(), false,
- false, false,
NO_DEFAULT_VALUES, PropertyType.UNDEFINED,
- NO_CONSTRAINTS,
false),
- new JcrPropertyDefinition(session, null,
ALL_NODES,
-
OnParentVersionBehavior.COPY.getJcrValue(), false,
- false, false,
NO_DEFAULT_VALUES, PropertyType.UNDEFINED,
- NO_CONSTRAINTS,
true),}), NOT_MIXIN,
+ }), Arrays.asList(new JcrPropertyDefinition[] {
+ new JcrPropertyDefinition(context, null, ALL_NODES,
OnParentVersionBehavior.COPY.getJcrValue(), false, false, false,
+ NO_DEFAULT_VALUES, PropertyType.UNDEFINED,
NO_CONSTRAINTS, false),
+ new JcrPropertyDefinition(context, null, ALL_NODES,
OnParentVersionBehavior.COPY.getJcrValue(), false, false, false,
+ NO_DEFAULT_VALUES, PropertyType.UNDEFINED,
NO_CONSTRAINTS, true),}), NOT_MIXIN,
ORDERABLE_CHILD_NODES);
primaryNodeTypes.addAll(Arrays.asList(new JcrNodeType[] {root, system,
namespaces, namespace,}));
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrBuiltinNodeTypeSource.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrBuiltinNodeTypeSource.java 2009-03-20
18:22:45 UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrBuiltinNodeTypeSource.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -31,6 +31,7 @@
import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
import net.jcip.annotations.Immutable;
+import org.jboss.dna.graph.ExecutionContext;
import org.jboss.dna.graph.property.Name;
import org.jboss.dna.graph.property.basic.BasicName;
@@ -45,27 +46,30 @@
/** The list of mixin node types. */
private final List<JcrNodeType> mixinNodeTypes;
- JcrBuiltinNodeTypeSource( JcrSession session ) {
- this(session, null);
+ JcrBuiltinNodeTypeSource( ExecutionContext context ) {
+ this(context, null);
}
- JcrBuiltinNodeTypeSource( JcrSession session,
+ JcrBuiltinNodeTypeSource( ExecutionContext context,
JcrNodeTypeSource predecessor ) {
super(predecessor);
primaryNodeTypes = new ArrayList<JcrNodeType>();
- Value trueValue = new JcrValue(session.getExecutionContext().getValueFactories(),
PropertyType.BOOLEAN, Boolean.TRUE);
- Value ntBaseValue = new
JcrValue(session.getExecutionContext().getValueFactories(), PropertyType.NAME,
JcrNtLexicon.BASE);
+ /*
+ * These values get created without a session cache, as they aren't tied to
any particular session.
+ */
+ Value trueValue = new JcrValue(context.getValueFactories(), null,
PropertyType.BOOLEAN, Boolean.TRUE);
+ Value ntBaseValue = new JcrValue(context.getValueFactories(), null,
PropertyType.NAME, JcrNtLexicon.BASE);
// Stubbing in child node and property definitions for now
- JcrNodeType base = new JcrNodeType(session, JcrNtLexicon.BASE, NO_SUPERTYPES,
NO_PRIMARY_ITEM_NAME, NO_CHILD_NODES,
- Arrays.asList(new JcrPropertyDefinition[] {
- new JcrPropertyDefinition(session, null,
JcrLexicon.PRIMARY_TYPE,
+ JcrNodeType base = new JcrNodeType(context, NO_NODE_TYPE_MANAGER,
JcrNtLexicon.BASE, NO_SUPERTYPES, NO_PRIMARY_ITEM_NAME,
+ NO_CHILD_NODES, Arrays.asList(new
JcrPropertyDefinition[] {
+ new JcrPropertyDefinition(context, null,
JcrLexicon.PRIMARY_TYPE,
OnParentVersionBehavior.COMPUTE.getJcrValue(), true,
true, true,
NO_DEFAULT_VALUES, PropertyType.NAME,
NO_CONSTRAINTS,
false),
- new JcrPropertyDefinition(session, null,
JcrLexicon.MIXIN_TYPES,
+ new JcrPropertyDefinition(context, null,
JcrLexicon.MIXIN_TYPES,
OnParentVersionBehavior.COMPUTE.getJcrValue(), false,
false, true,
NO_DEFAULT_VALUES, PropertyType.NAME,
NO_CONSTRAINTS,
true)}), NOT_MIXIN,
@@ -73,13 +77,14 @@
// This needs to be declared early, as some of the primary types reference it
JcrNodeType referenceable = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrMixLexicon.REFERENCEABLE,
NO_SUPERTYPES,
NO_PRIMARY_ITEM_NAME,
NO_CHILD_NODES,
Arrays.asList(new
JcrPropertyDefinition[] {new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.UUID,
OnParentVersionBehavior.INITIALIZE.getJcrValue(),
@@ -93,14 +98,15 @@
IS_A_MIXIN,
UNORDERABLE_CHILD_NODES);
JcrNodeType childNodeDefinition = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.CHILD_NODE_DEFINITION,
Arrays.asList(new NodeType[]
{base}),
NO_PRIMARY_ITEM_NAME,
NO_CHILD_NODES,
Arrays.asList(new
JcrPropertyDefinition[] {
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.AUTO_CREATED,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -108,14 +114,14 @@
PropertyType.BOOLEAN, NO_CONSTRAINTS,
false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.DEFAULT_PRIMARY_TYPE,
OnParentVersionBehavior.COPY.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,
PropertyType.NAME, NO_CONSTRAINTS, false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.MANDATORY,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -123,14 +129,14 @@
PropertyType.BOOLEAN, NO_CONSTRAINTS,
false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.NAME,
OnParentVersionBehavior.COPY.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,
PropertyType.NAME, NO_CONSTRAINTS, false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.ON_PARENT_VERSION,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -138,7 +144,7 @@
PropertyType.STRING, NO_CONSTRAINTS,
false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.PROTECTED,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -146,7 +152,7 @@
PropertyType.BOOLEAN, NO_CONSTRAINTS,
false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.REQUIRED_PRIMARY_TYPES,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -154,7 +160,7 @@
new Value[] {ntBaseValue},
PropertyType.NAME, NO_CONSTRAINTS, true),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.SAME_NAME_SIBLINGS,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -164,13 +170,14 @@
UNORDERABLE_CHILD_NODES);
JcrNodeType hierarchyNode = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.HIERARCHY_NODE,
Arrays.asList(new NodeType[]
{base}),
NO_PRIMARY_ITEM_NAME,
NO_CHILD_NODES,
Arrays.asList(new
JcrPropertyDefinition[] {new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.CREATED,
OnParentVersionBehavior.INITIALIZE.getJcrValue(),
@@ -184,12 +191,13 @@
NOT_MIXIN, UNORDERABLE_CHILD_NODES);
JcrNodeType file = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.FILE,
Arrays.asList(new NodeType[]
{hierarchyNode}),
JcrLexicon.CONTENT,
Arrays.asList(new JcrNodeDefinition[] {new
JcrNodeDefinition(
-
session,
+
context,
null,
JcrLexicon.CONTENT,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -199,12 +207,13 @@
NO_PROPERTIES, NOT_MIXIN,
UNORDERABLE_CHILD_NODES);
JcrNodeType folder = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.FOLDER,
Arrays.asList(new NodeType[]
{hierarchyNode}),
NO_PRIMARY_ITEM_NAME,
Arrays.asList(new JcrNodeDefinition[] {new
JcrNodeDefinition(
-
session,
+
context,
null,
null,
OnParentVersionBehavior.VERSION.getJcrValue(),
@@ -217,12 +226,13 @@
NO_PROPERTIES, NOT_MIXIN,
UNORDERABLE_CHILD_NODES);
JcrNodeType frozenNode = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.FROZEN_NODE,
Arrays.asList(new NodeType[] {base,
referenceable}),
NO_PRIMARY_ITEM_NAME,
Arrays.asList(new JcrNodeDefinition[]
{new JcrNodeDefinition(
-
session,
+
context,
null,
ALL_NODES,
OnParentVersionBehavior.ABORT.getJcrValue(),
@@ -233,36 +243,37 @@
null,
new NodeType[] {base})}),
Arrays.asList(new
JcrPropertyDefinition[] {
- new JcrPropertyDefinition(session,
null, JcrLexicon.FROZEN_MIXIN_TYPES,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.FROZEN_MIXIN_TYPES,
OnParentVersionBehavior.ABORT.getJcrValue(),
false,
false, true, NO_DEFAULT_VALUES,
PropertyType.NAME, NO_CONSTRAINTS, true),
- new JcrPropertyDefinition(session,
null, JcrLexicon.FROZEN_PRIMARY_TYPE,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.FROZEN_PRIMARY_TYPE,
OnParentVersionBehavior.ABORT.getJcrValue(), true,
true,
true, NO_DEFAULT_VALUES, PropertyType.NAME,
NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.FROZEN_UUID,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.FROZEN_UUID,
OnParentVersionBehavior.ABORT.getJcrValue(), true,
true,
true, NO_DEFAULT_VALUES,
PropertyType.STRING, NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, ALL_NODES,
+ new JcrPropertyDefinition(context,
null, ALL_NODES,
OnParentVersionBehavior.ABORT.getJcrValue(),
false,
false, true, NO_DEFAULT_VALUES,
PropertyType.UNDEFINED, NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, ALL_NODES,
+ new JcrPropertyDefinition(context,
null, ALL_NODES,
OnParentVersionBehavior.ABORT.getJcrValue(),
false,
false, true, NO_DEFAULT_VALUES,
PropertyType.UNDEFINED, NO_CONSTRAINTS, true),}),
NOT_MIXIN, ORDERABLE_CHILD_NODES);
JcrNodeType linkedFile = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.LINKED_FILE,
Arrays.asList(new NodeType[]
{hierarchyNode}),
JcrLexicon.CONTENT,
NO_CHILD_NODES,
Arrays.asList(new
JcrPropertyDefinition[] {new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.CONTENT,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -277,14 +288,15 @@
// Had to be moved above nodeType due to dependency
JcrNodeType propertyDefinition = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.PROPERTY_DEFINITION,
Arrays.asList(new NodeType[]
{base}),
NO_PRIMARY_ITEM_NAME,
NO_CHILD_NODES,
Arrays.asList(new
JcrPropertyDefinition[] {
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.AUTO_CREATED,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -292,7 +304,7 @@
PropertyType.BOOLEAN, NO_CONSTRAINTS,
false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.DEFAULT_VALUES,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -300,7 +312,7 @@
PropertyType.UNDEFINED, NO_CONSTRAINTS,
true),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.MANDATORY,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -308,7 +320,7 @@
PropertyType.BOOLEAN, NO_CONSTRAINTS,
false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.MULTIPLE,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -316,21 +328,21 @@
PropertyType.BOOLEAN, NO_CONSTRAINTS,
false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.NAME,
OnParentVersionBehavior.COPY.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,
PropertyType.NAME, NO_CONSTRAINTS, false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.ON_PARENT_VERSION,
OnParentVersionBehavior.COPY.getJcrValue(),
false, true, false, NO_DEFAULT_VALUES,
PropertyType.STRING, NO_CONSTRAINTS, false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.PROTECTED,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -338,14 +350,14 @@
PropertyType.BOOLEAN, NO_CONSTRAINTS,
false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.REQUIRED_TYPE,
OnParentVersionBehavior.COPY.getJcrValue(),
false, true, false, NO_DEFAULT_VALUES,
PropertyType.STRING, NO_CONSTRAINTS, false),
new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.VALUE_CONSTRAINTS,
OnParentVersionBehavior.COPY.getJcrValue(),
@@ -353,79 +365,82 @@
PropertyType.STRING, NO_CONSTRAINTS, true)}),
NOT_MIXIN,
UNORDERABLE_CHILD_NODES);
- JcrNodeType nodeType = new JcrNodeType(session, JcrNtLexicon.NODE_TYPE,
Arrays.asList(new NodeType[] {base}),
- NO_PRIMARY_ITEM_NAME, Arrays.asList(new
JcrNodeDefinition[] {
- new JcrNodeDefinition(session, null,
JcrLexicon.CHILD_NODE_DEFINITION,
+ JcrNodeType nodeType = new JcrNodeType(context, NO_NODE_TYPE_MANAGER,
JcrNtLexicon.NODE_TYPE,
+ Arrays.asList(new NodeType[] {base}),
NO_PRIMARY_ITEM_NAME,
+ Arrays.asList(new JcrNodeDefinition[] {
+ new JcrNodeDefinition(context, null,
JcrLexicon.CHILD_NODE_DEFINITION,
OnParentVersionBehavior.VERSION.getJcrValue(), false,
false, false,
true, JcrNtLexicon.CHILD_NODE_DEFINITION,
new NodeType[]
{childNodeDefinition}),
- new JcrNodeDefinition(session, null,
JcrLexicon.PROPERTY_DEFINITION,
+ new JcrNodeDefinition(context, null,
JcrLexicon.PROPERTY_DEFINITION,
OnParentVersionBehavior.VERSION.getJcrValue(), false,
false, false,
true, JcrNtLexicon.PROPERTY_DEFINITION,
new NodeType[]
{propertyDefinition})}),
Arrays.asList(new JcrPropertyDefinition[]
{
- new JcrPropertyDefinition(session,
null, JcrLexicon.HAS_ORDERABLE_CHILD_NODES,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.HAS_ORDERABLE_CHILD_NODES,
OnParentVersionBehavior.COPY.getJcrValue(), false,
true, false,
NO_DEFAULT_VALUES,
PropertyType.BOOLEAN, NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.IS_MIXIN,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.IS_MIXIN,
OnParentVersionBehavior.COPY.getJcrValue(), false,
true, false,
NO_DEFAULT_VALUES,
PropertyType.BOOLEAN, NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.NODE_TYPE_NAME,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.NODE_TYPE_NAME,
OnParentVersionBehavior.COPY.getJcrValue(), false,
true, false,
NO_DEFAULT_VALUES, PropertyType.NAME,
NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.PRIMARY_ITEM_NAME,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.PRIMARY_ITEM_NAME,
OnParentVersionBehavior.COPY.getJcrValue(), false,
false,
false, NO_DEFAULT_VALUES, PropertyType.NAME,
NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.SUPERTYPES,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.SUPERTYPES,
OnParentVersionBehavior.COPY.getJcrValue(), false,
false,
false, NO_DEFAULT_VALUES, PropertyType.NAME,
NO_CONSTRAINTS, true),}), NOT_MIXIN,
UNORDERABLE_CHILD_NODES);
- JcrNodeType query = new JcrNodeType(session, JcrNtLexicon.QUERY,
Arrays.asList(new NodeType[] {base}),
- NO_PRIMARY_ITEM_NAME, NO_CHILD_NODES,
Arrays.asList(new JcrPropertyDefinition[] {
- new JcrPropertyDefinition(session, null,
JcrLexicon.LANGUAGE,
+ JcrNodeType query = new JcrNodeType(context, NO_NODE_TYPE_MANAGER,
JcrNtLexicon.QUERY,
+ Arrays.asList(new NodeType[] {base}),
NO_PRIMARY_ITEM_NAME, NO_CHILD_NODES,
+ Arrays.asList(new JcrPropertyDefinition[] {
+ new JcrPropertyDefinition(context, null,
JcrLexicon.LANGUAGE,
OnParentVersionBehavior.COPY.getJcrValue(), false,
false, false,
NO_DEFAULT_VALUES, PropertyType.STRING,
NO_CONSTRAINTS,
false),
- new JcrPropertyDefinition(session, null,
JcrLexicon.STATEMENT,
+ new JcrPropertyDefinition(context, null,
JcrLexicon.STATEMENT,
OnParentVersionBehavior.COPY.getJcrValue(), false,
false, false,
NO_DEFAULT_VALUES, PropertyType.STRING,
NO_CONSTRAINTS,
false),}), NOT_MIXIN,
UNORDERABLE_CHILD_NODES);
- JcrNodeType resource = new JcrNodeType(session, JcrNtLexicon.RESOURCE,
+ JcrNodeType resource = new JcrNodeType(context, NO_NODE_TYPE_MANAGER,
JcrNtLexicon.RESOURCE,
Arrays.asList(new NodeType[] {base,
referenceable}), JcrLexicon.DATA,
NO_CHILD_NODES, Arrays.asList(new
JcrPropertyDefinition[] {
- new JcrPropertyDefinition(session,
null, JcrLexicon.DATA,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.DATA,
OnParentVersionBehavior.COPY.getJcrValue(), false,
true, false,
NO_DEFAULT_VALUES, PropertyType.BINARY,
NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.ENCODING,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.ENCODING,
OnParentVersionBehavior.COPY.getJcrValue(), false,
false,
false, NO_DEFAULT_VALUES,
PropertyType.STRING, NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.LAST_MODIFIED,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.LAST_MODIFIED,
OnParentVersionBehavior.IGNORE.getJcrValue(), false,
true, false,
NO_DEFAULT_VALUES, PropertyType.DATE,
NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.MIMETYPE,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.MIMETYPE,
OnParentVersionBehavior.COPY.getJcrValue(), false,
true, false,
NO_DEFAULT_VALUES, PropertyType.STRING,
NO_CONSTRAINTS, false),}), NOT_MIXIN,
UNORDERABLE_CHILD_NODES);
JcrNodeType unstructured = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.UNSTRUCTURED,
Arrays.asList(new NodeType[] {base}),
NO_PRIMARY_ITEM_NAME,
Arrays.asList(new JcrNodeDefinition[]
{new JcrNodeDefinition(
-
session,
+
context,
null,
ALL_NODES,
OnParentVersionBehavior.VERSION.getJcrValue(),
@@ -436,23 +451,24 @@
JcrNtLexicon.UNSTRUCTURED,
new NodeType[] {base}),}),
Arrays.asList(new
JcrPropertyDefinition[] {
- new JcrPropertyDefinition(session,
null, ALL_NODES,
+ new JcrPropertyDefinition(context,
null, ALL_NODES,
OnParentVersionBehavior.COPY.getJcrValue(),
false,
false, false, NO_DEFAULT_VALUES,
PropertyType.UNDEFINED, NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, ALL_NODES,
+ new JcrPropertyDefinition(context,
null, ALL_NODES,
OnParentVersionBehavior.COPY.getJcrValue(),
false,
false, false, NO_DEFAULT_VALUES,
PropertyType.UNDEFINED, NO_CONSTRAINTS, true),}),
NOT_MIXIN, ORDERABLE_CHILD_NODES);
JcrNodeType version = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.VERSION,
Arrays.asList(new NodeType[] {base,
referenceable}),
NO_PRIMARY_ITEM_NAME,
Arrays.asList(new JcrNodeDefinition[] {new
JcrNodeDefinition(
-
session,
+
context,
null,
JcrLexicon.FROZEN_NODE,
OnParentVersionBehavior.ABORT.getJcrValue(),
@@ -463,28 +479,29 @@
null,
new NodeType[] {frozenNode}),}),
Arrays.asList(new JcrPropertyDefinition[]
{
- new JcrPropertyDefinition(session,
null, JcrLexicon.CREATED,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.CREATED,
OnParentVersionBehavior.ABORT.getJcrValue(), true,
true, true,
NO_DEFAULT_VALUES, PropertyType.DATE,
NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.PREDECESSORS,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.PREDECESSORS,
OnParentVersionBehavior.ABORT.getJcrValue(), false,
false, true,
NO_DEFAULT_VALUES,
PropertyType.REFERENCE, NO_CONSTRAINTS, true),
- new JcrPropertyDefinition(session,
null, JcrLexicon.SUCCESSORS,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.SUCCESSORS,
OnParentVersionBehavior.ABORT.getJcrValue(), false,
false, true,
NO_DEFAULT_VALUES,
PropertyType.REFERENCE, NO_CONSTRAINTS, true),}),
NOT_MIXIN, UNORDERABLE_CHILD_NODES);
JcrNodeType versionLabels = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.VERSION_LABELS,
Arrays.asList(new NodeType[]
{base}),
NO_PRIMARY_ITEM_NAME,
NO_CHILD_NODES,
Arrays.asList(new
JcrPropertyDefinition[] {new JcrPropertyDefinition(
-
session,
+
context,
null,
ALL_NODES,
OnParentVersionBehavior.ABORT.getJcrValue(),
@@ -498,25 +515,26 @@
NOT_MIXIN, UNORDERABLE_CHILD_NODES);
JcrNodeType versionHistory = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.VERSION_HISTORY,
Arrays.asList(new NodeType[] {base,
referenceable}),
NO_PRIMARY_ITEM_NAME,
Arrays.asList(new
JcrNodeDefinition[] {
- new JcrNodeDefinition(session,
null, JcrLexicon.ROOT_VERSION,
+ new JcrNodeDefinition(context,
null, JcrLexicon.ROOT_VERSION,
OnParentVersionBehavior.ABORT.getJcrValue(), true,
true,
true, false, JcrNtLexicon.VERSION,
new
NodeType[] {version}),
- new JcrNodeDefinition(session,
null, JcrLexicon.VERSION_LABELS,
+ new JcrNodeDefinition(context,
null, JcrLexicon.VERSION_LABELS,
OnParentVersionBehavior.ABORT.getJcrValue(), true,
true,
true, false, JcrNtLexicon.VERSION_LABELS,
new
NodeType[] {versionLabels}),
- new JcrNodeDefinition(session,
null, ALL_NODES,
+ new JcrNodeDefinition(context,
null, ALL_NODES,
OnParentVersionBehavior.ABORT.getJcrValue(),
false,
false, true, false, JcrNtLexicon.VERSION,
new
NodeType[] {version}),}),
Arrays.asList(new
JcrPropertyDefinition[] {new JcrPropertyDefinition(
-
session,
+
context,
null,
JcrLexicon.VERSIONABLE_UUID,
OnParentVersionBehavior.ABORT.getJcrValue(),
@@ -531,13 +549,14 @@
Name CHILD_VERSION_HISTORY = new BasicName(JcrLexicon.Namespace.URI,
"childVersionHistory");
JcrNodeType versionedChild = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrNtLexicon.VERSIONED_CHILD,
Arrays.asList(new NodeType[]
{base}),
NO_PRIMARY_ITEM_NAME,
NO_CHILD_NODES,
Arrays.asList(new
JcrPropertyDefinition[] {new JcrPropertyDefinition(
-
session,
+
context,
null,
CHILD_VERSION_HISTORY,
OnParentVersionBehavior.ABORT.getJcrValue(),
@@ -556,42 +575,43 @@
mixinNodeTypes = new ArrayList<JcrNodeType>();
- JcrNodeType lockable = new JcrNodeType(session, JcrMixLexicon.LOCKABLE,
NO_SUPERTYPES, NO_PRIMARY_ITEM_NAME,
- NO_CHILD_NODES, Arrays.asList(new
JcrPropertyDefinition[] {
- new JcrPropertyDefinition(session,
null, JcrLexicon.LOCK_IS_DEEP,
+ JcrNodeType lockable = new JcrNodeType(context, NO_NODE_TYPE_MANAGER,
JcrMixLexicon.LOCKABLE, NO_SUPERTYPES,
+ NO_PRIMARY_ITEM_NAME, NO_CHILD_NODES,
Arrays.asList(new JcrPropertyDefinition[] {
+ new JcrPropertyDefinition(context,
null, JcrLexicon.LOCK_IS_DEEP,
OnParentVersionBehavior.IGNORE.getJcrValue(), false,
false, true,
NO_DEFAULT_VALUES,
PropertyType.BOOLEAN, NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.LOCK_OWNER,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.LOCK_OWNER,
OnParentVersionBehavior.IGNORE.getJcrValue(), false,
false, true,
NO_DEFAULT_VALUES, PropertyType.STRING,
NO_CONSTRAINTS, false)}), IS_A_MIXIN,
UNORDERABLE_CHILD_NODES);
JcrNodeType versionable = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
JcrMixLexicon.VERSIONABLE,
Arrays.asList(new NodeType[]
{referenceable}),
NO_PRIMARY_ITEM_NAME,
NO_CHILD_NODES,
Arrays.asList(new
JcrPropertyDefinition[] {
- new JcrPropertyDefinition(session,
null, JcrLexicon.BASE_VERSION,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.BASE_VERSION,
OnParentVersionBehavior.IGNORE.getJcrValue(),
false,
true, true, NO_DEFAULT_VALUES,
PropertyType.REFERENCE, NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.IS_CHECKED_OUT,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.IS_CHECKED_OUT,
OnParentVersionBehavior.IGNORE.getJcrValue(),
true,
true, true, new Value[] {trueValue},
PropertyType.BOOLEAN, NO_CONSTRAINTS, false),
- new JcrPropertyDefinition(session,
null, JcrLexicon.MERGE_FAILED,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.MERGE_FAILED,
OnParentVersionBehavior.ABORT.getJcrValue(),
false,
false, true, NO_DEFAULT_VALUES,
PropertyType.REFERENCE, NO_CONSTRAINTS, true),
- new JcrPropertyDefinition(session,
null, JcrLexicon.PREDECESSORS,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.PREDECESSORS,
OnParentVersionBehavior.COPY.getJcrValue(),
false,
true, true, NO_DEFAULT_VALUES,
PropertyType.REFERENCE, NO_CONSTRAINTS, true),
- new JcrPropertyDefinition(session,
null, JcrLexicon.VERSION_HISTORY,
+ new JcrPropertyDefinition(context,
null, JcrLexicon.VERSION_HISTORY,
OnParentVersionBehavior.COPY.getJcrValue(),
false,
true, true, NO_DEFAULT_VALUES,
PropertyType.REFERENCE, NO_CONSTRAINTS, false),}),
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-20
18:22:45 UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrItemDefinition.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -26,6 +26,7 @@
import javax.jcr.nodetype.ItemDefinition;
import javax.jcr.nodetype.NodeType;
import net.jcip.annotations.Immutable;
+import org.jboss.dna.graph.ExecutionContext;
import org.jboss.dna.graph.property.Name;
/**
@@ -35,7 +36,7 @@
@Immutable
class JcrItemDefinition implements ItemDefinition {
- protected final JcrSession session;
+ protected final ExecutionContext context;
protected final JcrNodeType declaringNodeType;
protected final Name name;
@@ -44,7 +45,7 @@
private final boolean mandatory;
private final boolean protectedItem;
- JcrItemDefinition( JcrSession session,
+ JcrItemDefinition( ExecutionContext context,
JcrNodeType declaringNodeType,
Name name,
int onParentVersion,
@@ -52,12 +53,9 @@
boolean mandatory,
boolean protectedItem ) {
super();
- this.session = session;
+ this.context = context;
this.declaringNodeType = declaringNodeType;
- this.name = name != null ? name : session.getExecutionContext()
- .getValueFactories()
- .getNameFactory()
-
.create(JcrNodeType.RESIDUAL_ITEM_NAME);
+ this.name = name != null ? name :
context.getValueFactories().getNameFactory().create(JcrNodeType.RESIDUAL_ITEM_NAME) ;
this.onParentVersion = onParentVersion;
this.autoCreated = autoCreated;
this.mandatory = mandatory;
@@ -87,7 +85,7 @@
return JcrNodeType.RESIDUAL_ITEM_NAME;
}
- return name.getString(session.getExecutionContext().getNamespaceRegistry());
+ return name.getString(context.getNamespaceRegistry());
}
/**
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeDefinition.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeDefinition.java 2009-03-20
18:22:45 UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeDefinition.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -23,10 +23,10 @@
*/
package org.jboss.dna.jcr;
-import javax.jcr.RepositoryException;
import javax.jcr.nodetype.NodeDefinition;
import javax.jcr.nodetype.NodeType;
import net.jcip.annotations.Immutable;
+import org.jboss.dna.graph.ExecutionContext;
import org.jboss.dna.graph.property.Name;
/**
@@ -50,7 +50,10 @@
/** A durable identifier for this node definition. */
private NodeDefinitionId id;
- JcrNodeDefinition( JcrSession session,
+ /** Link to the repository node type manager */
+ private final RepositoryNodeTypeManager nodeTypeManager;
+
+ JcrNodeDefinition( ExecutionContext context,
JcrNodeType declaringNodeType,
Name name,
int onParentVersion,
@@ -60,12 +63,31 @@
boolean allowsSameNameSiblings,
Name defaultPrimaryTypeName,
NodeType[] requiredPrimaryTypes ) {
- super(session, declaringNodeType, name, onParentVersion, autoCreated, mandatory,
protectedItem);
+ super(context, declaringNodeType, name, onParentVersion, autoCreated, mandatory,
protectedItem);
+ this.nodeTypeManager = null;
this.allowsSameNameSiblings = allowsSameNameSiblings;
this.defaultPrimaryTypeName = defaultPrimaryTypeName;
this.requiredPrimaryTypes = requiredPrimaryTypes;
}
+ JcrNodeDefinition( ExecutionContext context,
+ RepositoryNodeTypeManager nodeTypeManager,
+ JcrNodeType declaringNodeType,
+ Name name,
+ int onParentVersion,
+ boolean autoCreated,
+ boolean mandatory,
+ boolean protectedItem,
+ boolean allowsSameNameSiblings,
+ Name defaultPrimaryTypeName,
+ NodeType[] requiredPrimaryTypes ) {
+ super(context, declaringNodeType, name, onParentVersion, autoCreated, mandatory,
protectedItem);
+ this.nodeTypeManager = nodeTypeManager;
+ this.allowsSameNameSiblings = allowsSameNameSiblings;
+ this.defaultPrimaryTypeName = defaultPrimaryTypeName;
+ this.requiredPrimaryTypes = requiredPrimaryTypes;
+ }
+
/**
* Get the durable identifier for this node definition.
*
@@ -98,21 +120,7 @@
return null;
}
- /*
- * Translate the name to a prefixed type based on the current transient (session)
and persistent (workspace)
- * prefix to URI mappings.
- */
- String mappedTypeName =
defaultPrimaryTypeName.getString(session.getExecutionContext().getNamespaceRegistry());
-
- try {
- return
session.getWorkspace().getNodeTypeManager().getNodeType(mappedTypeName);
- } catch (RepositoryException re) {
- /*
- * The spec doesn't allow us to throw a checked exception at this point,
but a corrupted namespace mapping
- * would be pretty severe.
- */
- throw new IllegalStateException(JcrI18n.typeNotFound.text(mappedTypeName));
- }
+ return nodeTypeManager.getNodeType(defaultPrimaryTypeName);
}
/**
@@ -133,7 +141,15 @@
* <code>declaringNodeType</code>.
*/
JcrNodeDefinition with( JcrNodeType declaringNodeType ) {
- return new JcrNodeDefinition(session, declaringNodeType, name,
getOnParentVersion(), isAutoCreated(), isMandatory(),
- isProtected(), allowsSameNameSiblings(),
defaultPrimaryTypeName, requiredPrimaryTypes);
+ return new JcrNodeDefinition(this.context, declaringNodeType.nodeTypeManager(),
declaringNodeType, name,
+ getOnParentVersion(), isAutoCreated(),
isMandatory(), isProtected(),
+ allowsSameNameSiblings(), defaultPrimaryTypeName,
requiredPrimaryTypes);
}
+
+ JcrNodeDefinition with( ExecutionContext context ) {
+ return new JcrNodeDefinition(context, this.nodeTypeManager,
this.declaringNodeType, name, getOnParentVersion(),
+ isAutoCreated(), isMandatory(), isProtected(),
allowsSameNameSiblings(),
+ defaultPrimaryTypeName, requiredPrimaryTypes);
+ }
+
}
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeType.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeType.java 2009-03-20 18:22:45 UTC
(rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeType.java 2009-03-20 18:40:19 UTC
(rev 785)
@@ -30,13 +30,13 @@
import java.util.Set;
import java.util.Stack;
import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.nodetype.NodeDefinition;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.PropertyDefinition;
import net.jcip.annotations.Immutable;
import org.jboss.dna.common.util.CheckArg;
+import org.jboss.dna.graph.ExecutionContext;
import org.jboss.dna.graph.property.Name;
/**
@@ -65,12 +65,16 @@
private boolean orderableChildNodes;
/**
- * A reference to the session in which this node type exists, used to remap the
internal names to their appropriate prefixed
- * version (e.g., <
code>{http://www.jcp.org/jcr/nt/1.0}base</code> to
<code>"nt:base"</code>.).
+ * A reference to the execution context in which this node type exists, used to remap
the internal names to their appropriate
+ * prefixed version (e.g.,
<
code>{http://www.jcp.org/jcr/nt/1.0}base</code> to
<code>"nt:base"</code>.).
*/
- private JcrSession session;
+ private ExecutionContext context;
- JcrNodeType( JcrSession session,
+ /** Link to the repository node type manager for the repository to which this node
type belongs. */
+ private RepositoryNodeTypeManager nodeTypeManager;
+
+ JcrNodeType( ExecutionContext context,
+ RepositoryNodeTypeManager nodeTypeManager,
Name name,
List<NodeType> declaredSupertypes,
Name primaryItemName,
@@ -78,7 +82,8 @@
Collection<JcrPropertyDefinition> propertyDefinitions,
boolean mixin,
boolean orderableChildNodes ) {
- this.session = session;
+ this.context = context;
+ this.nodeTypeManager = nodeTypeManager;
this.name = name;
this.primaryItemName = primaryItemName;
this.declaredSupertypes = declaredSupertypes != null ? declaredSupertypes :
Collections.<NodeType>emptyList();
@@ -224,35 +229,6 @@
* @return the {@link NodeDefinition} that best matches the child, or null if a child
with the supplied name and primary type
* are not allowed given this node type
*/
- @Deprecated
- JcrNodeDefinition findBestNodeDefinitionForChild( String childName,
- String primaryNodeTypeName ) {
- // First, try to find a child node definition with the given name
- JcrNodeDefinition childNode = getChildNodeDefinition(childName);
-
- // If there are no named definitions in the type hierarchy, try to find a
residual node definition
- if (childNode == null) {
- childNode = getChildNodeDefinition(RESIDUAL_ITEM_NAME);
- }
-
- // Check if the node can be added with the named child node definition
- if (childNode != null && primaryNodeTypeName != null) {
- NodeType primaryNodeType = getPrimaryNodeType(primaryNodeTypeName);
- if (primaryNodeType == null) return null;
- if (!checkTypeAgainstDefinition(primaryNodeType, childNode)) return null;
- }
- return childNode;
- }
-
- /**
- * Determine the best (most specific) {@link NodeDefinition} for a child with the
supplied name and primary type. If the
- * primary type is not supplied, then only the name is considered when finding a best
match.
- *
- * @param childName the name of the child
- * @param primaryNodeTypeName the name of the primary node type for the child
- * @return the {@link NodeDefinition} that best matches the child, or null if a child
with the supplied name and primary type
- * are not allowed given this node type
- */
JcrNodeDefinition findBestNodeDefinitionForChild( Name childName,
Name primaryNodeTypeName ) {
// First, try to find a child node definition with the given name
@@ -314,17 +290,8 @@
return false;
}
- protected final NodeType getPrimaryNodeType( String primaryNodeTypeName ) {
- try {
- return
session.getWorkspace().getNodeTypeManager().getNodeType(primaryNodeTypeName);
- } catch (RepositoryException re) {
- // If the node type doesn't exist, you can't add a child node with
that type
- return null;
- }
- }
-
protected final NodeType getPrimaryNodeType( Name primaryNodeTypeName ) {
- return session.nodeTypeManager().getNodeType(primaryNodeTypeName);
+ return nodeTypeManager.getNodeType(primaryNodeTypeName);
}
/**
@@ -338,7 +305,8 @@
CheckArg.isNotNull(childNodeName, "childNodeName");
CheckArg.isNotNull(primaryNodeTypeName, "primaryNodeTypeName");
- NodeType primaryNodeType = getPrimaryNodeType(primaryNodeTypeName);
+ Name nodeTypeName =
context.getValueFactories().getNameFactory().create(primaryNodeTypeName);
+ NodeType primaryNodeType = getPrimaryNodeType(nodeTypeName);
if (primaryNodeType == null) {
// The node type doesn't exist, so you can't add a child node with
that type
return false;
@@ -585,7 +553,7 @@
*/
public String getName() {
// Translate the name to the correct prefix. Need to check the session to support
url-remapping.
- return name.getString(session.getExecutionContext().getNamespaceRegistry());
+ return name.getString(context.getNamespaceRegistry());
}
/**
@@ -609,7 +577,7 @@
}
// Translate the name to the correct prefix. Need to check the session to support
url-remapping.
- return
primaryItemName.getString(session.getExecutionContext().getNamespaceRegistry());
+ return primaryItemName.getString(context.getNamespaceRegistry());
}
/**
@@ -695,4 +663,33 @@
public String toString() {
return getName();
}
+
+ /**
+ * Returns a {@link JcrNodeType} that is equivalent to this {@link JcrNodeType},
except with a different repository node type
+ * manager. This method should only be called during the initialization of the
repository node type manager, unless some kind
+ * of cross-repository type shipping is implemented.
+ *
+ * @param nodeTypeManager the new repository node type manager
+ * @return a new {@link JcrNodeType} that has the same state as this node type, but
with the given node type manager.
+ */
+ final JcrNodeType with( RepositoryNodeTypeManager nodeTypeManager ) {
+ return new JcrNodeType(this.context, nodeTypeManager, this.name,
this.declaredSupertypes, this.primaryItemName,
+ this.childNodeDefinitions, this.propertyDefinitions,
this.mixin, this.orderableChildNodes);
+ }
+
+ /**
+ * Returns a {@link JcrNodeType} that is equivalent to this {@link JcrNodeType},
except with a different execution context.
+ *
+ * @param context the new execution context
+ * @return a new {@link JcrNodeType} that has the same state as this node type, but
with the given node type manager.
+ * @see JcrNodeTypeManager
+ */
+ final JcrNodeType with( ExecutionContext context ) {
+ return new JcrNodeType(context, this.nodeTypeManager, this.name,
this.declaredSupertypes, this.primaryItemName,
+ this.childNodeDefinitions, this.propertyDefinitions,
this.mixin, this.orderableChildNodes);
+ }
+
+ final RepositoryNodeTypeManager nodeTypeManager() {
+ return nodeTypeManager;
+ }
}
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-20
18:22:45 UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrNodeTypeManager.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -25,44 +25,35 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import javax.jcr.RepositoryException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.nodetype.NodeDefinition;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeIterator;
import javax.jcr.nodetype.NodeTypeManager;
-import net.jcip.annotations.NotThreadSafe;
+import net.jcip.annotations.Immutable;
+import org.jboss.dna.graph.ExecutionContext;
import org.jboss.dna.graph.property.Name;
/**
- * Local implementation of @{link NodeTypeManager}. Initialized with {@link NodeType}
source data when it is created (in the
- * {@link JcrWorkspace} constructor.
+ * Local implementation of @{link NodeTypeManager}. This class handles translation
between {@link Name}s and {@link String}s based
+ * on the namespace registry from the session's execution context in order to support
transient namespace remappings. All
+ * {@link NodeType}s returned by this implementation are wrapped with the execution
context of the session to allow proper ongoing
+ * handling of names. This implies that reference equality is not a safe test for node
type equivalence.
+ *
+ * @see RepositoryNodeTypeManager
*/
-@NotThreadSafe
+@Immutable
class JcrNodeTypeManager implements NodeTypeManager {
- private final Map<Name, JcrNodeType> primaryNodeTypes;
- private final Map<Name, JcrNodeType> mixinNodeTypes;
- private final JcrSession session;
+ private final ExecutionContext context;
+ private final RepositoryNodeTypeManager repositoryTypeManager;
- JcrNodeTypeManager( JcrSession session,
- JcrNodeTypeSource source ) {
- this.session = session;
- Collection<JcrNodeType> primary = source.getPrimaryNodeTypes();
- Collection<JcrNodeType> mixins = source.getMixinNodeTypes();
-
- primaryNodeTypes = new HashMap<Name, JcrNodeType>(primary.size());
- for (JcrNodeType nodeType : primary) {
- primaryNodeTypes.put(nodeType.getInternalName(), nodeType);
- }
-
- mixinNodeTypes = new HashMap<Name, JcrNodeType>(mixins.size());
- for (JcrNodeType nodeType : mixins) {
- mixinNodeTypes.put(nodeType.getInternalName(), nodeType);
- }
+ JcrNodeTypeManager( ExecutionContext context,
+ RepositoryNodeTypeManager repositoryTypeManager ) {
+ this.context = context;
+ this.repositoryTypeManager = repositoryTypeManager;
}
/**
@@ -72,6 +63,9 @@
*/
public NodeTypeIterator getAllNodeTypes() {
+ Collection<JcrNodeType> mixinNodeTypes =
repositoryTypeManager.getMixinNodeTypes();
+ Collection<JcrNodeType> primaryNodeTypes =
repositoryTypeManager.getPrimaryNodeTypes();
+
// TODO: Can revisit this approach later if it becomes a performance issue
/*
* Note also that this creates a subtle difference in behavior for concurrent
modification
@@ -82,8 +76,16 @@
*/
List<NodeType> allTypes = new
ArrayList<NodeType>(primaryNodeTypes.size() + mixinNodeTypes.size());
- allTypes.addAll(primaryNodeTypes.values());
- allTypes.addAll(mixinNodeTypes.values());
+
+ // Need to return a version of the node type with the current context
+ for (JcrNodeType type : primaryNodeTypes) {
+ allTypes.add(type.with(context));
+ }
+
+ for (JcrNodeType type : mixinNodeTypes) {
+ allTypes.add(type.with(context));
+ }
+
return new JcrNodeTypeIterator(allTypes);
}
@@ -93,16 +95,15 @@
* @see javax.jcr.nodetype.NodeTypeManager#getMixinNodeTypes()
*/
public NodeTypeIterator getMixinNodeTypes() {
- return new JcrNodeTypeIterator(mixinNodeTypes.values());
- }
+ Collection<JcrNodeType> rawTypes =
repositoryTypeManager.getMixinNodeTypes();
+ List<JcrNodeType> types = new
ArrayList<JcrNodeType>(rawTypes.size());
- JcrNodeType getNodeType( Name nodeTypeName ) {
+ // Need to return a version of the node type with the current context
+ for (JcrNodeType type : rawTypes) {
+ types.add(type.with(context));
+ }
- JcrNodeType nodeType = primaryNodeTypes.get(nodeTypeName);
- if (nodeType == null) {
- nodeType = mixinNodeTypes.get(nodeTypeName);
- }
- return nodeType;
+ return new JcrNodeTypeIterator(types);
}
/**
@@ -111,19 +112,47 @@
* @see javax.jcr.nodetype.NodeTypeManager#getNodeType(java.lang.String)
*/
public NodeType getNodeType( String nodeTypeName ) throws NoSuchNodeTypeException,
RepositoryException {
- Name ntName =
session.getExecutionContext().getValueFactories().getNameFactory().create(nodeTypeName);
- NodeType type = getNodeType(ntName);
- if (type != null) return type;
+ Name ntName = context.getValueFactories().getNameFactory().create(nodeTypeName);
+ JcrNodeType type = repositoryTypeManager.getNodeType(ntName);
+ if (type != null) {
+ type = type.with(context);
+ return type;
+ }
throw new NoSuchNodeTypeException(JcrI18n.typeNotFound.text(nodeTypeName));
}
/**
+ * Returns the node type with the given name (if one exists)
+ *
+ * @param nodeTypeName the name of the node type to be returned
+ * @return the node type with the given name (if one exists)
+ * @see RepositoryNodeTypeManager#getNodeType(Name)
+ */
+ JcrNodeType getNodeType( Name nodeTypeName ) {
+ JcrNodeType nodeType = repositoryTypeManager.getNodeType(nodeTypeName);
+
+ if (nodeType != null) {
+ nodeType = nodeType.with(context);
+ }
+
+ return nodeType;
+ }
+
+ /**
* {@inheritDoc}
*
* @see javax.jcr.nodetype.NodeTypeManager#getPrimaryNodeTypes()
*/
public NodeTypeIterator getPrimaryNodeTypes() {
- return new JcrNodeTypeIterator(primaryNodeTypes.values());
+ Collection<JcrNodeType> rawTypes =
repositoryTypeManager.getPrimaryNodeTypes();
+ List<JcrNodeType> types = new
ArrayList<JcrNodeType>(rawTypes.size());
+
+ // Need to return a version of the node type with the current context
+ for (JcrNodeType type : rawTypes) {
+ types.add(type.with(context));
+ }
+
+ return new JcrNodeTypeIterator(types);
}
/**
@@ -134,7 +163,7 @@
* @throws NoSuchNodeTypeException
*/
JcrNodeDefinition getRootNodeDefinition() throws NoSuchNodeTypeException,
RepositoryException {
- for (NodeDefinition definition :
getNodeType(DnaLexicon.ROOT).getChildNodeDefinitions()) {
+ for (NodeDefinition definition :
repositoryTypeManager.getNodeType(DnaLexicon.ROOT).getChildNodeDefinitions()) {
if (definition.getName().equals(JcrNodeType.RESIDUAL_ITEM_NAME)) return
(JcrNodeDefinition)definition;
}
assert false; // should not get here
@@ -150,7 +179,7 @@
JcrNodeDefinition getNodeDefinition( NodeDefinitionId definitionId ) {
if (definitionId == null) return null;
Name nodeTypeName = definitionId.getNodeTypeName();
- JcrNodeType nodeType = getNodeType(nodeTypeName);
+ JcrNodeType nodeType = repositoryTypeManager.getNodeType(nodeTypeName);
return nodeType.getChildNodeDefinition(definitionId.getChildDefinitionName());
}
@@ -165,7 +194,7 @@
boolean prefersMultiValued ) {
if (definitionId == null) return null;
Name nodeTypeName = definitionId.getNodeTypeName();
- JcrNodeType nodeType = getNodeType(nodeTypeName);
+ JcrNodeType nodeType = repositoryTypeManager.getNodeType(nodeTypeName);
return nodeType.getPropertyDefinition(definitionId.getPropertyDefinitionName(),
prefersMultiValued);
}
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrPropertyDefinition.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrPropertyDefinition.java 2009-03-20
18:22:45 UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrPropertyDefinition.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -23,6 +23,7 @@
*/
package org.jboss.dna.jcr;
+import java.util.UUID;
import java.util.regex.Pattern;
import javax.jcr.Node;
import javax.jcr.PropertyType;
@@ -41,6 +42,7 @@
import org.jboss.dna.graph.property.ValueFactory;
import org.jboss.dna.graph.property.ValueFormatException;
import org.jboss.dna.graph.property.basic.JodaDateTime;
+
/**
* DNA implementation of the {@link PropertyDefinition} interface. This implementation is
immutable and has all fields initialized
* through its constructor.
@@ -55,7 +57,7 @@
private PropertyDefinitionId id;
private ConstraintChecker checker = null;
- JcrPropertyDefinition( JcrSession session,
+ JcrPropertyDefinition( ExecutionContext context,
JcrNodeType declaringNodeType,
Name name,
int onParentVersion,
@@ -66,7 +68,7 @@
int requiredType,
String[] valueConstraints,
boolean multiple ) {
- super(session, declaringNodeType, name, onParentVersion, autoCreated, mandatory,
protectedItem);
+ super(context, declaringNodeType, name, onParentVersion, autoCreated, mandatory,
protectedItem);
this.defaultValues = defaultValues;
this.requiredType = requiredType;
this.valueConstraints = valueConstraints;
@@ -130,7 +132,7 @@
* <code>declaringNodeType</code>.
*/
JcrPropertyDefinition with( JcrNodeType declaringNodeType ) {
- return new JcrPropertyDefinition(this.session, declaringNodeType, this.name,
this.getOnParentVersion(),
+ return new JcrPropertyDefinition(this.context, declaringNodeType, this.name,
this.getOnParentVersion(),
this.isAutoCreated(), this.isMandatory(),
this.isProtected(), this.getDefaultValues(),
this.getRequiredType(),
this.getValueConstraints(), this.isMultiple());
}
@@ -152,7 +154,7 @@
ConstraintChecker checker = this.checker;
if (checker == null || checker.getType() != type) {
- checker = createChecker(session, type, valueConstraints);
+ checker = createChecker(context, type, valueConstraints);
this.checker = checker;
}
@@ -167,21 +169,18 @@
/**
* Returns a {@link ConstraintChecker} that will interpret the constraints described
by <code>valueConstraints</code> using
* the semantics defined in section 6.7.16 of the JCR 1.0 specification for the type
indicated by <code>type</code> (where
- * <code>type</code> is a value from {@link PropertyType}) for the given
<code>session</code>. The session is required to
- * handle the UUID lookups for reference constraints and provides the {@link
ExecutionContext} that is used to provide
- * namespace mappings and value factories for the other constraint checkers.
+ * <code>type</code> is a value from {@link PropertyType}) for the given
<code>context</code>. The {@link ExecutionContext} is
+ * used to provide namespace mappings and value factories for the other constraint
checkers.
*
- * @param session the current session
+ * @param context the execution context
* @param type the type of constraint checker that should be created (based on values
from {@link PropertyType}).
* Type-specific semantics are defined in section 6.7.16 of the JCR 1.0
specification.
* @param valueConstraints the constraints for the node as provided by {@link
PropertyDefinition#getValueConstraints()}.
* @return a constraint checker that matches the given parameters
*/
- private ConstraintChecker createChecker( JcrSession session,
- int type,
- String[] valueConstraints ) {
- ExecutionContext context = session.getExecutionContext();
-
+ private ConstraintChecker createChecker( ExecutionContext context,
+ int type,
+ String[] valueConstraints ) {
switch (type) {
case PropertyType.BINARY:
return new BinaryConstraintChecker(valueConstraints, context);
@@ -196,7 +195,7 @@
case PropertyType.PATH:
return new PathConstraintChecker(valueConstraints, context);
case PropertyType.REFERENCE:
- return new ReferenceConstraintChecker(valueConstraints, session);
+ return new ReferenceConstraintChecker(valueConstraints, context);
case PropertyType.STRING:
return new StringConstraintChecker(valueConstraints, context);
default:
@@ -333,7 +332,8 @@
@Override
public boolean matches( Value value ) {
Binary binary =
valueFactories.getBinaryFactory().create(((JcrValue)value).value());
- return super.matches(new JcrValue(valueFactories, PropertyType.LONG,
binary.getSize()));
+ Value sizeValue =
((JcrValue)value).sessionCache().session().getValueFactory().createValue(binary.getSize());
+ return super.matches(sizeValue);
}
}
@@ -408,15 +408,15 @@
@Immutable
private static class ReferenceConstraintChecker implements ConstraintChecker {
- private final JcrSession session;
+ // private final ExecutionContext context;
private final Name[] constraints;
protected ReferenceConstraintChecker( String[] valueConstraints,
- JcrSession session ) {
- this.session = session;
+ ExecutionContext context ) {
+ // this.context = context;
- NameFactory factory =
session.getExecutionContext().getValueFactories().getNameFactory();
+ NameFactory factory = context.getValueFactories().getNameFactory();
constraints = new Name[valueConstraints.length];
@@ -430,18 +430,21 @@
}
public boolean matches( Value value ) {
- assert value != null;
+ assert value instanceof JcrValue;
+ JcrValue jcrValue = (JcrValue)value;
+ SessionCache cache = jcrValue.sessionCache();
+
Node node = null;
try {
- node = session.getNodeByUUID(((JcrValue)value).value().toString());
+ node = cache.findJcrNode((UUID)jcrValue.value());
} catch (RepositoryException re) {
return false;
}
for (int i = 0; i < constraints.length; i++) {
try {
- if
(node.isNodeType(constraints[i].getString(session.getExecutionContext().getNamespaceRegistry())))
{
+ if
(node.isNodeType(constraints[i].getString(cache.session().namespaces()))) {
return true;
}
} catch (RepositoryException re) {
@@ -474,9 +477,11 @@
}
public boolean matches( Value value ) {
- assert value != null;
+ assert value instanceof JcrValue;
- Name name = valueFactory.create(((JcrValue)value).value());
+ JcrValue jcrValue = (JcrValue)value;
+ // Need to use the session execution context to handle the remaps
+ Name name =
jcrValue.sessionCache().session().getExecutionContext().getValueFactories().getNameFactory().create(jcrValue.value());
for (int i = 0; i < constraints.length; i++) {
if (constraints[i].equals(name)) {
@@ -561,5 +566,4 @@
return false;
}
}
-
}
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrRepository.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrRepository.java 2009-03-20 18:22:45
UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrRepository.java 2009-03-20 18:40:19
UTC (rev 785)
@@ -75,6 +75,7 @@
private final Map<String, String> descriptors;
private final ExecutionContext executionContext;
private final RepositoryConnectionFactory connectionFactory;
+ private final RepositoryNodeTypeManager repositoryTypeManager;
/**
* Creates a JCR repository that uses the supplied {@link RepositoryConnectionFactory
repository connection factory} to
@@ -145,9 +146,22 @@
modifiableDescriptors.put(Repository.SPEC_NAME_DESC,
JcrI18n.SPEC_NAME_DESC.text());
modifiableDescriptors.put(Repository.SPEC_VERSION_DESC, "1.0");
this.descriptors = Collections.unmodifiableMap(modifiableDescriptors);
+
+ JcrNodeTypeSource source = null;
+ source = new JcrBuiltinNodeTypeSource(this.executionContext);
+ source = new DnaBuiltinNodeTypeSource(this.executionContext, source);
+ this.repositoryTypeManager = new RepositoryNodeTypeManager(this.executionContext,
source);
}
/**
+ * Returns the repository-level node type manager
+ * @return the repository-level node type manager
+ */
+ RepositoryNodeTypeManager getRepositoryTypeManager() {
+ return repositoryTypeManager;
+ }
+
+ /**
* Get the name of the repository source that this repository is using.
*
* @return the name of the RepositorySource
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrSession.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrSession.java 2009-03-20 18:22:45 UTC
(rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrSession.java 2009-03-20 18:40:19 UTC
(rev 785)
@@ -146,6 +146,11 @@
assert this.graph != null;
}
+ // Added to facilitate mock testing of items without necessarily requiring an entire
repository structure to be built
+ final SessionCache cache() {
+ return this.cache;
+ }
+
ExecutionContext getExecutionContext() {
return this.executionContext;
}
@@ -439,39 +444,41 @@
*/
public ValueFactory getValueFactory() {
final ValueFactories valueFactories = executionContext.getValueFactories();
+ final SessionCache sessionCache = this.cache;
+
return new ValueFactory() {
public Value createValue( String value,
int propertyType ) {
- return new JcrValue(valueFactories, propertyType, value);
+ return new JcrValue(valueFactories, sessionCache, propertyType, value);
}
public Value createValue( Node value ) throws RepositoryException {
- return new JcrValue(valueFactories, PropertyType.REFERENCE,
UUID.fromString(value.getUUID()));
+ return new JcrValue(valueFactories, sessionCache, PropertyType.REFERENCE,
UUID.fromString(value.getUUID()));
}
public Value createValue( InputStream value ) {
- return new JcrValue(valueFactories, PropertyType.BINARY, value);
+ return new JcrValue(valueFactories, sessionCache, PropertyType.BINARY,
value);
}
public Value createValue( Calendar value ) {
- return new JcrValue(valueFactories, PropertyType.DATE, value);
+ return new JcrValue(valueFactories, sessionCache, PropertyType.DATE,
value);
}
public Value createValue( boolean value ) {
- return new JcrValue(valueFactories, PropertyType.BOOLEAN, value);
+ return new JcrValue(valueFactories, sessionCache, PropertyType.BOOLEAN,
value);
}
public Value createValue( double value ) {
- return new JcrValue(valueFactories, PropertyType.DOUBLE, value);
+ return new JcrValue(valueFactories, sessionCache, PropertyType.DOUBLE,
value);
}
public Value createValue( long value ) {
- return new JcrValue(valueFactories, PropertyType.LONG, value);
+ return new JcrValue(valueFactories, sessionCache, PropertyType.LONG,
value);
}
public Value createValue( String value ) {
- return new JcrValue(valueFactories, PropertyType.STRING, value);
+ return new JcrValue(valueFactories, sessionCache, PropertyType.STRING,
value);
}
};
}
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrValue.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrValue.java 2009-03-20 18:22:45 UTC
(rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrValue.java 2009-03-20 18:40:19 UTC
(rev 785)
@@ -43,19 +43,27 @@
@NotThreadSafe
final class JcrValue implements Value {
+ private final SessionCache sessionCache;
private final ValueFactories valueFactories;
private final int type;
private final Object value;
JcrValue( ValueFactories valueFactories,
+ SessionCache sessionCache,
int type,
Object value ) {
assert valueFactories != null;
assert type == PropertyType.BINARY || type == PropertyType.BOOLEAN || type ==
PropertyType.DATE
|| type == PropertyType.DOUBLE || type == PropertyType.LONG || type ==
PropertyType.NAME
|| type == PropertyType.PATH || type == PropertyType.REFERENCE || type ==
PropertyType.STRING;
+
+ // Leaving this assertion out for now so that values can be created in node type
sources, which are created outside
+ // the context of any particular session.
+ // assert sessionCache != null;
assert value != null;
+
this.valueFactories = valueFactories;
+ this.sessionCache = sessionCache;
this.type = type;
this.value = value;
}
@@ -81,6 +89,14 @@
}
/**
+ * Returns the session cache for the session that created this value.
+ * @return the session cache for the session that created this value.
+ */
+ final SessionCache sessionCache() {
+ return sessionCache;
+ }
+
+ /**
* {@inheritDoc}
*
* @see javax.jcr.Value#getBoolean()
@@ -195,6 +211,11 @@
return type;
}
+ private JcrValue withTypeAndValue( int type,
+ Object value ) {
+ return new JcrValue(this.valueFactories, this.sessionCache, type, value);
+ }
+
/**
* Returns a copy of the current {@link JcrValue} cast to the JCR type specified by
the <code>type</code> argument. If the
* value cannot be converted base don the JCR type conversion rules, a {@link
ValueFormatException} will be thrown.
@@ -207,14 +228,14 @@
JcrValue asType( int type ) throws ValueFormatException {
if (type == this.type) {
- return new JcrValue(this.valueFactories, this.type, this.value);
+ return this.withTypeAndValue(this.type, this.value);
}
switch (type) {
case PropertyType.BOOLEAN:
try {
if (this.type == PropertyType.STRING || this.type ==
PropertyType.BINARY) {
- return new JcrValue(this.valueFactories, type,
valueFactories.getBooleanFactory().create(value));
+ return this.withTypeAndValue(type,
valueFactories.getBooleanFactory().create(value));
}
} catch (org.jboss.dna.graph.property.ValueFormatException vfe) {
throw createValueFormatException(vfe);
@@ -225,7 +246,7 @@
try {
if (this.type == PropertyType.DOUBLE || this.type ==
PropertyType.LONG || this.type == PropertyType.STRING
|| this.type == PropertyType.BINARY) {
- return new JcrValue(this.valueFactories, type,
valueFactories.getDateFactory().create(value));
+ return this.withTypeAndValue(type,
valueFactories.getDateFactory().create(value));
}
} catch (org.jboss.dna.graph.property.ValueFormatException vfe) {
throw createValueFormatException(vfe);
@@ -236,12 +257,12 @@
case PropertyType.NAME:
try {
if (this.type == PropertyType.STRING) {
- return new JcrValue(this.valueFactories, type,
this.valueFactories.getNameFactory().create(value));
+ return this.withTypeAndValue(type,
valueFactories.getNameFactory().create(value));
}
String valueAsString =
this.valueFactories.getStringFactory().create(value);
if (this.type == PropertyType.BINARY) {
- return new JcrValue(this.valueFactories, type,
this.valueFactories.getNameFactory().create(valueAsString));
+ return this.withTypeAndValue(type,
valueFactories.getNameFactory().create(valueAsString));
}
@@ -250,9 +271,7 @@
Segment[] segments = path.getSegmentsArray();
if (!path.isAbsolute() && segments.length == 1 &&
!segments[0].hasIndex()) {
- return new JcrValue(this.valueFactories, type,
-
this.valueFactories.getNameFactory().create(valueAsString));
-
+ return this.withTypeAndValue(type,
valueFactories.getNameFactory().create(valueAsString));
}
}
} catch (org.jboss.dna.graph.property.ValueFormatException vfe) {
@@ -264,7 +283,8 @@
case PropertyType.PATH:
try {
if (this.type == PropertyType.STRING) {
- return new JcrValue(this.valueFactories, type,
this.valueFactories.getPathFactory().create(value));
+ return this.withTypeAndValue(type,
valueFactories.getPathFactory().create(value));
+
}
} catch (org.jboss.dna.graph.property.ValueFormatException vfe) {
throw createValueFormatException(vfe);
@@ -282,18 +302,21 @@
// Anything can be converted to these types
case PropertyType.BINARY:
try {
- return new JcrValue(this.valueFactories, type,
valueFactories.getBinaryFactory().create(value));
+ return this.withTypeAndValue(type,
valueFactories.getBinaryFactory().create(value));
+
} catch (org.jboss.dna.graph.property.ValueFormatException vfe) {
throw createValueFormatException(vfe);
}
case PropertyType.STRING:
try {
- return new JcrValue(this.valueFactories, type,
valueFactories.getStringFactory().create(value));
+ return this.withTypeAndValue(type,
valueFactories.getStringFactory().create(value));
+
} catch (org.jboss.dna.graph.property.ValueFormatException vfe) {
throw createValueFormatException(vfe);
}
case PropertyType.UNDEFINED:
- return new JcrValue(this.valueFactories, this.type, this.value);
+ return this.withTypeAndValue(this.type, this.value);
+
default:
assert false : "Unexpected JCR property type " + type;
// This should still throw an exception even if assertions are turned
off
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrWorkspace.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrWorkspace.java 2009-03-20 18:22:45
UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/JcrWorkspace.java 2009-03-20 18:40:19
UTC (rev 785)
@@ -148,10 +148,7 @@
this.session = new JcrSession(this.repository, this, this.context,
sessionAttributes);
// This must be initialized after the session
- JcrNodeTypeSource source = null;
- source = new JcrBuiltinNodeTypeSource(this.session);
- source = new DnaBuiltinNodeTypeSource(this.session, source);
- this.nodeTypeManager = new JcrNodeTypeManager(this.session, source);
+ this.nodeTypeManager = new JcrNodeTypeManager(session.getExecutionContext(),
repository.getRepositoryTypeManager());
}
final String getSourceName() {
Added: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/RepositoryNodeTypeManager.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/RepositoryNodeTypeManager.java
(rev 0)
+++
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/RepositoryNodeTypeManager.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -0,0 +1,81 @@
+/*
+ * JBoss DNA (
http://www.jboss.org/dna)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of
+ * individual contributors.
+ *
+ * Unless otherwise indicated, all code in JBoss DNA is licensed
+ * to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * JBoss DNA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.dna.jcr;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import net.jcip.annotations.Immutable;
+import org.jboss.dna.graph.ExecutionContext;
+import org.jboss.dna.graph.property.Name;
+
+/**
+ * The {@link RepositoryNodeTypeManager} is the maintainer of node type information for
the entire repository at run-time. The
+ * repository manager maintains a list of all node types and the ability to retrieve node
types by {@link Name}. </p> The JCR 1.0
+ * and 2.0 specifications both require that node type information be shared across all
sessions within a repository and that the
+ * {@link javax.jcr.nodetype.NodeTypeManager} perform operations based on the string
versions of {@link Name}s based on the permanent
+ * (workspace-scoped) and transient (session-scoped) namespace mappings. DNA achieves
this by maintaining a single master
+ * repository of all node type information (the {@link RepositoryNodeTypeManager}) and
per-session wrappers (
+ * {@link JcrNodeTypeManager}) for this master repository that perform {@link String} to
{@link Name} translation based on the
+ * {@link javax.jcr.Session}'s transient mappings and then delegating node type
lookups to the repository manager.
+ */
+@Immutable
+class RepositoryNodeTypeManager {
+
+ private final Map<Name, JcrNodeType> primaryNodeTypes;
+ private final Map<Name, JcrNodeType> mixinNodeTypes;
+
+ RepositoryNodeTypeManager( ExecutionContext context,
+ JcrNodeTypeSource source ) {
+ Collection<JcrNodeType> primary = source.getPrimaryNodeTypes();
+ Collection<JcrNodeType> mixins = source.getMixinNodeTypes();
+
+ primaryNodeTypes = new HashMap<Name, JcrNodeType>(primary.size());
+ for (JcrNodeType nodeType : primary) {
+ primaryNodeTypes.put(nodeType.getInternalName(), nodeType.with(this));
+ }
+
+ mixinNodeTypes = new HashMap<Name, JcrNodeType>(mixins.size());
+ for (JcrNodeType nodeType : mixins) {
+ mixinNodeTypes.put(nodeType.getInternalName(), nodeType.with(this));
+ }
+ }
+
+ public Collection<JcrNodeType> getMixinNodeTypes() {
+ return mixinNodeTypes.values();
+ }
+
+ public Collection<JcrNodeType> getPrimaryNodeTypes() {
+ return primaryNodeTypes.values();
+ }
+
+ JcrNodeType getNodeType( Name nodeTypeName ) {
+
+ JcrNodeType nodeType = primaryNodeTypes.get(nodeTypeName);
+ if (nodeType == null) {
+ nodeType = mixinNodeTypes.get(nodeTypeName);
+ }
+ return nodeType;
+ }
+}
Property changes on:
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/RepositoryNodeTypeManager.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/SessionCache.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/SessionCache.java 2009-03-20 18:22:45
UTC (rev 784)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/SessionCache.java 2009-03-20 18:40:19
UTC (rev 785)
@@ -1441,7 +1441,7 @@
* @param primaryTypeOfChild the name of the child's primary type
* @return the node definition for this child, as best as can be determined, or null
if the node definition could not be
* determined
- * @throws RepositoryException if the parent's pimary node type cannot be found
in the {@link NodeTypeManager}
+ * @throws RepositoryException if the parent's primary node type cannot be found
in the {@link NodeTypeManager}
*/
protected JcrNodeDefinition findNodeDefinitionForChild( NodeInfo parentInfo,
Name childName,
Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrNodeTest.java
===================================================================
--- trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrNodeTest.java 2009-03-20
18:22:45 UTC (rev 784)
+++ trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrNodeTest.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -151,7 +151,7 @@
}
protected Value stringValueFor( Object value ) {
- return new JcrValue(context.getValueFactories(), PropertyType.STRING, value);
+ return new JcrValue(context.getValueFactories(), cache, PropertyType.STRING,
value);
}
protected void addChild( Name childName,
@@ -463,37 +463,7 @@
assertThat((JcrSession)node.getSession(), is(session));
}
- @Test
- public void shouldProvideUuidIfReferenceable() throws Exception {
- // Create the property ...
- PropertyId propertyId = new PropertyId(uuid, name("jcr:mixinTypes"));
- AbstractJcrProperty property = mock(AbstractJcrProperty.class);
- stub(cache.findJcrProperty(propertyId)).toReturn(property);
- stub(property.getValues()).toReturn(new Value[]
{stringValueFor("acme:someMixin"),
stringValueFor("mix:referenceable")});
- // Call the method ...
- assertThat(node.getUUID(), is(uuid.toString()));
- }
-
@Test( expected = UnsupportedRepositoryOperationException.class )
- public void shouldNotProvideUuidIfNotReferenceable() throws Exception {
- // Create the property ...
- PropertyId propertyId = new PropertyId(uuid, name("jcr:mixinTypes"));
- AbstractJcrProperty property = mock(AbstractJcrProperty.class);
- stub(cache.findJcrProperty(propertyId)).toReturn(property);
- stub(property.getValues()).toReturn(new Value[]
{stringValueFor("acme:someMixin"),
stringValueFor("mix:notReferenceable")});
- // Call the method ...
- node.getUUID();
- }
-
- @Test( expected = UnsupportedRepositoryOperationException.class )
- public void shouldNotProvideUuidIfNoMixinTypes() throws Exception {
- PropertyId propertyId = new PropertyId(uuid, name("jcr:mixinTypes"));
- stub(cache.findJcrProperty(propertyId)).toReturn(null);
- // Call the method ...
- node.getUUID();
- }
-
- @Test( expected = UnsupportedRepositoryOperationException.class )
public void shouldNotAllowGetVersionHistory() throws Exception {
node.getVersionHistory();
}
Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrPropertyDefinitionTest.java
===================================================================
---
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrPropertyDefinitionTest.java 2009-03-20
18:22:45 UTC (rev 784)
+++
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrPropertyDefinitionTest.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -30,8 +30,6 @@
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
-import java.util.UUID;
-import javax.jcr.Node;
import javax.jcr.PropertyType;
import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
@@ -52,21 +50,22 @@
import org.mockito.MockitoAnnotations.Mock;
/**
- * Indirectly tests the JcrConstaintCheckerFactory through {@link
JcrPropertyDefinition#satisfiesConstraints(Value)},
- * which provides the wrapper around the factory that the rest of the API is expected to
utilize.
- *
+ * Indirectly tests the JcrConstaintCheckerFactory through {@link
JcrPropertyDefinition#satisfiesConstraints(Value)}, which
+ * provides the wrapper around the factory that the rest of the API is expected to
utilize.
*/
public class JcrPropertyDefinitionTest {
- private final String[] EXPECTED_BINARY_CONSTRAINTS = new String[] { "[,5)",
"[10, 20)", "(30,40]", "[50,]" };
- private final String[] EXPECTED_DATE_CONSTRAINTS = new String[] {
"[,+1945-08-01T01:30:00.000Z]", "[+1975-08-01T01:30:00.000Z,)"};
- private final String[] EXPECTED_DOUBLE_CONSTRAINTS = new String[] {
"[,5.0)", "[10.1, 20.2)", "(30.3,40.4]", "[50.5,]"
};
- private final String[] EXPECTED_LONG_CONSTRAINTS = new String[] { "[,5)",
"[10, 20)", "(30,40]", "[50,]" };
- private final String[] EXPECTED_NAME_CONSTRAINTS = new String[] {
"jcr:system", "dnatest:constrainedType" };
- //private final String[] EXPECTED_PATH_CONSTRAINTS = new String[] {"/" +
JcrLexicon.Namespace.URI + ":system/*", "b", "/a/b/c" };
- private final String[] EXPECTED_PATH_CONSTRAINTS = new String[]
{"/jcr:system/*", "b", "/a/b/c" };
- private final String[] EXPECTED_REFERENCE_CONSTRAINTS = new String[] {
"dna:root" };
- private final String[] EXPECTED_STRING_CONSTRAINTS = new String[] { "foo",
"bar*", ".*baz" };
+ private final String[] EXPECTED_BINARY_CONSTRAINTS = new String[] {"[,5)",
"[10, 20)", "(30,40]", "[50,]"};
+ private final String[] EXPECTED_DATE_CONSTRAINTS = new String[]
{"[,+1945-08-01T01:30:00.000Z]",
+ "[+1975-08-01T01:30:00.000Z,)"};
+ private final String[] EXPECTED_DOUBLE_CONSTRAINTS = new String[]
{"[,5.0)", "[10.1, 20.2)", "(30.3,40.4]",
"[50.5,]"};
+ private final String[] EXPECTED_LONG_CONSTRAINTS = new String[] {"[,5)",
"[10, 20)", "(30,40]", "[50,]"};
+ private final String[] EXPECTED_NAME_CONSTRAINTS = new String[]
{"jcr:system", "dnatest:constrainedType"};
+ // private final String[] EXPECTED_PATH_CONSTRAINTS = new String[] {"/" +
JcrLexicon.Namespace.URI + ":system/*", "b",
+ // "/a/b/c" };
+ private final String[] EXPECTED_PATH_CONSTRAINTS = new String[]
{"/jcr:system/*", "b", "/a/b/c"};
+ private final String[] EXPECTED_REFERENCE_CONSTRAINTS = new String[]
{"dna:root"};
+ private final String[] EXPECTED_STRING_CONSTRAINTS = new String[] {"foo",
"bar*", ".*baz"};
private String workspaceName;
private ExecutionContext context;
@@ -75,6 +74,7 @@
private JcrSession session;
private Graph graph;
private RepositoryConnectionFactory connectionFactory;
+ private RepositoryNodeTypeManager repoTypeManager;
private NodeTypeManager nodeTypeManager;
private Map<String, Object> sessionAttributes;
@Mock
@@ -82,6 +82,8 @@
@Before
public void beforeEach() throws Exception {
+ MockitoAnnotations.initMocks(this);
+
workspaceName = "workspace1";
final String repositorySourceName = "repository";
@@ -97,7 +99,7 @@
// Set up the initial content ...
graph = Graph.create(source, context);
-
+
// Make sure the path to the namespaces exists ...
graph.create("/jcr:system").and().create("/jcr:system/dna:namespaces");
graph.create("/a").and().create("/a/b").and().create("/a/b/c");
@@ -118,7 +120,12 @@
};
// Stub out the repository, since we only need a few methods ...
- MockitoAnnotations.initMocks(this);
+ JcrNodeTypeSource source = null;
+ source = new JcrBuiltinNodeTypeSource(this.context, source);
+ source = new DnaBuiltinNodeTypeSource(this.context, source);
+ source = new TestNodeTypeSource(this.context, source);
+ repoTypeManager = new RepositoryNodeTypeManager(context, source);
+ stub(repository.getRepositoryTypeManager()).toReturn(repoTypeManager);
stub(repository.getRepositorySourceName()).toReturn(repositorySourceName);
stub(repository.getConnectionFactory()).toReturn(connectionFactory);
@@ -132,39 +139,37 @@
// Create the session and log in ...
session = (JcrSession)workspace.getSession();
- nodeTypeManager = new JcrNodeTypeManager(this.session,
- new TestNodeTypeSource(this.session,
- new DnaBuiltinNodeTypeSource(this.session,
- new
JcrBuiltinNodeTypeSource(this.session))));
- stub(workspace.getNodeTypeManager()).toReturn(nodeTypeManager);
-
+ nodeTypeManager = workspace.getNodeTypeManager();
}
@After
public void after() throws Exception {
- if (session.isLive()) {
+ if (session != null && session.isLive()) {
session.logout();
}
}
- private JcrPropertyDefinition propertyDefinitionFor(NodeType nodeType, Name
propertyName) {
+ private JcrPropertyDefinition propertyDefinitionFor( NodeType nodeType,
+ Name propertyName ) {
PropertyDefinition propertyDefs[] = nodeType.getPropertyDefinitions();
String property = propertyName.getString(context.getNamespaceRegistry());
-
+
for (int i = 0; i < propertyDefs.length; i++) {
if (propertyDefs[i].getName().equals(property)) {
- return (JcrPropertyDefinition) propertyDefs[i];
+ return (JcrPropertyDefinition)propertyDefs[i];
}
}
- throw new IllegalStateException("Could not find property definition name
" + property + " for type "
- + nodeType.getName() + ". Test setup is
invalid.");
+ throw new IllegalStateException("Could not find property definition name
" + property + " for type " + nodeType.getName()
+ + ". Test setup is invalid.");
}
- private void checkConstraints(NodeType nodeType, Name propertyName, String[]
expectedConstraints) {
+ private void checkConstraints( NodeType nodeType,
+ Name propertyName,
+ String[] expectedConstraints ) {
PropertyDefinition propertyDefs[] = nodeType.getPropertyDefinitions();
String property = propertyName.getString(context.getNamespaceRegistry());
String[] constraints = null;
-
+
for (int i = 0; i < propertyDefs.length; i++) {
if (propertyDefs[i].getName().equals(property)) {
constraints = propertyDefs[i].getValueConstraints();
@@ -176,10 +181,10 @@
throw new IllegalStateException("Unexpected constraints for property:
" + property);
}
}
-
+
private NodeType validateTypeDefinition() throws Exception {
NamespaceRegistry nsr = context.getNamespaceRegistry();
-
+
NodeType constrainedType =
nodeTypeManager.getNodeType(TestLexicon.CONSTRAINED_TYPE.getString(nsr));
assertThat(constrainedType, notNullValue());
assertThat(propertyDefinitionFor(constrainedType,
TestLexicon.CONSTRAINED_BINARY), notNullValue());
@@ -190,7 +195,7 @@
assertThat(propertyDefinitionFor(constrainedType, TestLexicon.CONSTRAINED_PATH),
notNullValue());
assertThat(propertyDefinitionFor(constrainedType,
TestLexicon.CONSTRAINED_REFERENCE), notNullValue());
assertThat(propertyDefinitionFor(constrainedType,
TestLexicon.CONSTRAINED_STRING), notNullValue());
-
+
checkConstraints(constrainedType, TestLexicon.CONSTRAINED_BINARY,
EXPECTED_BINARY_CONSTRAINTS);
checkConstraints(constrainedType, TestLexicon.CONSTRAINED_DATE,
EXPECTED_DATE_CONSTRAINTS);
checkConstraints(constrainedType, TestLexicon.CONSTRAINED_DOUBLE,
EXPECTED_DOUBLE_CONSTRAINTS);
@@ -199,24 +204,26 @@
checkConstraints(constrainedType, TestLexicon.CONSTRAINED_PATH,
EXPECTED_PATH_CONSTRAINTS);
checkConstraints(constrainedType, TestLexicon.CONSTRAINED_REFERENCE,
EXPECTED_REFERENCE_CONSTRAINTS);
checkConstraints(constrainedType, TestLexicon.CONSTRAINED_STRING,
EXPECTED_STRING_CONSTRAINTS);
-
+
return constrainedType;
}
-
- private Value valueFor(Object value, int jcrType) {
- return new JcrValue(context.getValueFactories(), jcrType, value);
+
+ private Value valueFor( Object value,
+ int jcrType ) {
+ return new JcrValue(context.getValueFactories(), session.cache(), jcrType,
value);
}
-
- private String stringOfLength(int length) {
+
+ private String stringOfLength( int length ) {
StringBuffer buff = new StringBuffer(length);
for (int i = 0; i < length; i++) {
buff.append(i % 10);
}
-
+
return buff.toString();
}
- private boolean satisfiesConstraints(JcrPropertyDefinition property, Value[] values)
{
+ private boolean satisfiesConstraints( JcrPropertyDefinition property,
+ Value[] values ) {
for (int i = 0; i < values.length; i++) {
if (!property.satisfiesConstraints(values[i])) {
return false;
@@ -224,8 +231,8 @@
}
return true;
}
-
- @Test( expected = AssertionError.class )
+
+ @Test( expected = AssertionError.class )
public void shouldNotAllowNullValue() throws Exception {
NodeType constrainedType = validateTypeDefinition();
JcrPropertyDefinition prop = propertyDefinitionFor(constrainedType,
TestLexicon.CONSTRAINED_BINARY);
@@ -585,45 +592,41 @@
public void shouldAllowValidReferenceValue() throws Exception {
NodeType constrainedType = validateTypeDefinition();
JcrPropertyDefinition prop = propertyDefinitionFor(constrainedType,
TestLexicon.CONSTRAINED_REFERENCE);
-
- UUID uuid = ((AbstractJcrNode) session.getRootNode()).nodeUuid;
- assertThat(prop.satisfiesConstraints(valueFor(uuid, PropertyType.REFERENCE)),
is(true));
+ Value value = session.getValueFactory().createValue(session.getRootNode());
+
+ assertThat(prop.satisfiesConstraints(value), is(true));
}
@Test
public void shouldAllowValidReferenceValues() throws Exception {
NodeType constrainedType = validateTypeDefinition();
JcrPropertyDefinition prop = propertyDefinitionFor(constrainedType,
TestLexicon.CONSTRAINED_REFERENCE);
-
- UUID uuid = ((AbstractJcrNode) session.getRootNode()).nodeUuid;
- assertThat(satisfiesConstraints(prop, new Value[] { }), is(true));
- assertThat(satisfiesConstraints(prop, new Value[] { valueFor(uuid,
PropertyType.REFERENCE) }), is(true));
+ Value value = session.getValueFactory().createValue(session.getRootNode());
+
+ assertThat(satisfiesConstraints(prop, new Value[] {}), is(true));
+ assertThat(satisfiesConstraints(prop, new Value[] {value}), is(true));
}
-
@Test
public void shouldNotAllowInvalidReferenceValue() throws Exception {
NodeType constrainedType = validateTypeDefinition();
JcrPropertyDefinition prop = propertyDefinitionFor(constrainedType,
TestLexicon.CONSTRAINED_REFERENCE);
- Node aNode = session.getRootNode().getNode("a");
- UUID uuid = ((JcrNode) aNode).nodeUuid;
+ Value value =
session.getValueFactory().createValue(session.getRootNode().getNode("a"));
-
- assertThat(prop.satisfiesConstraints(valueFor(uuid, PropertyType.REFERENCE)),
is(false));
+ assertThat(prop.satisfiesConstraints(value), is(false));
}
@Test
public void shouldNotAllowInvalidReferenceValues() throws Exception {
NodeType constrainedType = validateTypeDefinition();
JcrPropertyDefinition prop = propertyDefinitionFor(constrainedType,
TestLexicon.CONSTRAINED_REFERENCE);
-
- Node aNode = session.getRootNode().getNode("a");
- UUID uuid = ((JcrNode) aNode).nodeUuid;
-
- assertThat(satisfiesConstraints(prop, new Value[] { valueFor(uuid,
PropertyType.REFERENCE) }), is(false));
+
+ Value value =
session.getValueFactory().createValue(session.getRootNode().getNode("a"));
+
+ assertThat(satisfiesConstraints(prop, new Value[] {value}), is(false));
}
}
Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrSessionTest.java
===================================================================
--- trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrSessionTest.java 2009-03-20 18:22:45
UTC (rev 784)
+++ trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrSessionTest.java 2009-03-20 18:40:19
UTC (rev 785)
@@ -50,7 +50,9 @@
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.ValueFactory;
+import javax.jcr.nodetype.NodeType;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import org.jboss.dna.graph.ExecutionContext;
@@ -81,6 +83,7 @@
private JcrSession session;
private Graph graph;
private RepositoryConnectionFactory connectionFactory;
+ private RepositoryNodeTypeManager repoTypeManager;
private Map<String, Object> sessionAttributes;
@Mock
private JcrRepository repository;
@@ -103,6 +106,7 @@
graph.create("/a").and().create("/a/b").and().create("/a/b/c");
graph.set("booleanProperty").on("/a/b").to(true);
graph.set("stringProperty").on("/a/b/c").to("value");
+
graph.set("jcr:mixinTypes").on("/a").to("mix:lockable");
graph.set("jcr:mixinTypes").on("/a/b").to("mix:referenceable");
graph.set("multiLineProperty").on("/a/b/c").to(MULTI_LINE_VALUE);
@@ -122,11 +126,18 @@
}
};
+ // Set up the repo type manager
+ JcrNodeTypeSource nodeTypes = null;
+ nodeTypes = new JcrBuiltinNodeTypeSource(context, nodeTypes);
+ nodeTypes = new DnaBuiltinNodeTypeSource(context, nodeTypes);
+ repoTypeManager = new RepositoryNodeTypeManager(context, nodeTypes);
+
// Stub out the repository, since we only need a few methods ...
MockitoAnnotations.initMocks(this);
stub(repository.getRepositorySourceName()).toReturn(repositorySourceName);
stub(repository.getConnectionFactory()).toReturn(connectionFactory);
-
+ stub(repository.getRepositoryTypeManager()).toReturn(repoTypeManager);
+
// Set up the session attributes ...
sessionAttributes = new HashMap<String, Object>();
sessionAttributes.put("attribute1", "value1");
@@ -404,7 +415,10 @@
public void rootNodeShouldHaveProperType() throws Exception {
Node rootNode = session.getRootNode();
-
assertTrue(rootNode.getPrimaryNodeType().equals(session.nodeTypeManager().getNodeType(DnaLexicon.ROOT)));
+ NodeType rootNodePrimaryType = rootNode.getPrimaryNodeType();
+ NodeType dnaRootType = session.nodeTypeManager().getNodeType(DnaLexicon.ROOT);
+
+ assertThat(rootNodePrimaryType.getName(), is(dnaRootType.getName()));
}
@@ -447,4 +461,34 @@
}
+ /*
+ * Moved these three tests over from AbstractJcrNode as they require more extensive
scaffolding that is already implemented in
+ * this test.
+ */
+
+ @Test
+ public void shouldProvideUuidIfReferenceable() throws Exception {
+ // The root node is referenceable in DNA
+ Node rootNode = session.getRootNode();
+
+ UUID uuid = ((AbstractJcrNode)rootNode).internalUuid();
+ assertThat(rootNode.getUUID(), is(uuid.toString()));
+ }
+
+ @Test( expected = UnsupportedRepositoryOperationException.class )
+ public void shouldNotProvideUuidIfNotReferenceable() throws Exception {
+ // The b node was not set up to be referenceable in this test, but does have a
mixin type
+ Node node = session.getRootNode().getNode("a");
+
+ node.getUUID();
+ }
+
+ @Test( expected = UnsupportedRepositoryOperationException.class )
+ public void shouldNotProvideUuidIfNoMixinTypes() throws Exception {
+ // The c node was not set up to be referenceable in this test and has no mixin
types
+ Node node =
session.getRootNode().getNode("a").getNode("b").getNode("c");
+
+ node.getUUID();
+ }
+
}
Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrValueTest.java
===================================================================
--- trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrValueTest.java 2009-03-20 18:22:45
UTC (rev 784)
+++ trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JcrValueTest.java 2009-03-20 18:40:19
UTC (rev 785)
@@ -38,6 +38,8 @@
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.mockito.MockitoAnnotations.Mock;
/**
* @author jverhaeg
@@ -46,11 +48,15 @@
private ValueFactories factories;
private JcrValue value;
+ @Mock
+ private SessionCache cache;
@Before
public void before() {
+ MockitoAnnotations.initMocks(this);
+
factories = new StandardValueFactories(Mockito.mock(NamespaceRegistry.class));
- value = new JcrValue(factories, PropertyType.BOOLEAN, true);
+ value = new JcrValue(factories, cache, PropertyType.BOOLEAN, true);
}
@Test
@@ -102,30 +108,30 @@
@Test( expected = ValueFormatException.class )
public void shouldNotProvideBooleanForDate() throws Exception {
- new JcrValue(factories, PropertyType.DATE, new Date()).getBoolean();
+ new JcrValue(factories, cache, PropertyType.DATE, new Date()).getBoolean();
}
@Test
public void shouldProvideDateForDate() throws Exception {
Date date = new Date();
- assertThat(new JcrValue(factories, PropertyType.DATE, date).getDate().getTime(),
is(date));
+ assertThat(new JcrValue(factories, cache, PropertyType.DATE,
date).getDate().getTime(), is(date));
}
@Test
public void shouldProvideDoubleForDate() throws Exception {
Date date = new Date();
- assertThat(new JcrValue(factories, PropertyType.DATE, date).getDouble(),
is((double)date.getTime()));
+ assertThat(new JcrValue(factories, cache, PropertyType.DATE, date).getDouble(),
is((double)date.getTime()));
}
@Test
public void shouldProvideLongForDate() throws Exception {
Date date = new Date();
- assertThat(new JcrValue(factories, PropertyType.DATE, date).getLong(),
is(date.getTime()));
+ assertThat(new JcrValue(factories, cache, PropertyType.DATE, date).getLong(),
is(date.getTime()));
}
@Test
public void shouldProvideStreamForDate() throws Exception {
- testProvidesStream(new JcrValue(factories, PropertyType.DATE, new Date()));
+ testProvidesStream(new JcrValue(factories, cache, PropertyType.DATE, new
Date()));
}
@Test
@@ -134,158 +140,160 @@
date.set(2008, 7, 18, 12, 0, 0);
date.set(Calendar.MILLISECOND, 0);
String expectedValue = "2008-08-18T12:00:00.000";
- assertThat(new JcrValue(factories, PropertyType.DATE,
date).getString().substring(0, expectedValue.length()),
+ assertThat(new JcrValue(factories, cache, PropertyType.DATE,
date).getString().substring(0, expectedValue.length()),
is(expectedValue));
- assertThat(new JcrValue(factories, PropertyType.DATE,
date.getTime()).getString().substring(0, expectedValue.length()),
+ assertThat(new JcrValue(factories, cache, PropertyType.DATE,
date.getTime()).getString().substring(0,
+
expectedValue.length()),
is(expectedValue));
}
@Test( expected = ValueFormatException.class )
public void shouldNotProvideBooleanForDouble() throws Exception {
- new JcrValue(factories, PropertyType.DOUBLE, 0.0).getBoolean();
+ new JcrValue(factories, cache, PropertyType.DOUBLE, 0.0).getBoolean();
}
@Test
public void shouldProvideDateForDouble() throws Exception {
Calendar expectedValue = Calendar.getInstance();
expectedValue.setTime(new Date(0L));
- assertThat(new JcrValue(factories, PropertyType.DOUBLE, 0.0).getDate(),
is(expectedValue));
+ assertThat(new JcrValue(factories, cache, PropertyType.DOUBLE, 0.0).getDate(),
is(expectedValue));
}
@Test
public void shouldProvideDoubleForDouble() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.DOUBLE, 1.2).getDouble(),
is(1.2));
+ assertThat(new JcrValue(factories, cache, PropertyType.DOUBLE, 1.2).getDouble(),
is(1.2));
}
@Test
public void shouldProvideLongForDouble() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.DOUBLE, 1.0).getLong(), is(1L));
- assertThat(new JcrValue(factories, PropertyType.DOUBLE,
Double.MAX_VALUE).getLong(), is(Long.MAX_VALUE));
+ assertThat(new JcrValue(factories, cache, PropertyType.DOUBLE, 1.0).getLong(),
is(1L));
+ assertThat(new JcrValue(factories, cache, PropertyType.DOUBLE,
Double.MAX_VALUE).getLong(), is(Long.MAX_VALUE));
}
@Test
public void shouldProvideStreamForDouble() throws Exception {
- testProvidesStream(new JcrValue(factories, PropertyType.DOUBLE, 1.0));
+ testProvidesStream(new JcrValue(factories, cache, PropertyType.DOUBLE, 1.0));
}
@Test
public void shouldProvideStringForDouble() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.DOUBLE, 1.0).getString(),
is("1.0"));
+ assertThat(new JcrValue(factories, cache, PropertyType.DOUBLE, 1.0).getString(),
is("1.0"));
}
@Test( expected = ValueFormatException.class )
public void shouldNotProvideBooleanForLong() throws Exception {
- new JcrValue(factories, PropertyType.LONG, 0L).getBoolean();
+ new JcrValue(factories, cache, PropertyType.LONG, 0L).getBoolean();
}
@Test
public void shouldProvideDateForLong() throws Exception {
Calendar expectedValue = Calendar.getInstance();
expectedValue.setTime(new Date(0L));
- assertThat(new JcrValue(factories, PropertyType.LONG, 0L).getDate(),
is(expectedValue));
+ assertThat(new JcrValue(factories, cache, PropertyType.LONG, 0L).getDate(),
is(expectedValue));
}
@Test
public void shouldProvideDoubleForLong() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.LONG, 1L).getDouble(), is(1.0));
+ assertThat(new JcrValue(factories, cache, PropertyType.LONG, 1L).getDouble(),
is(1.0));
}
@Test
public void shouldProvideLongForLong() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.LONG, 1L).getLong(), is(1L));
+ assertThat(new JcrValue(factories, cache, PropertyType.LONG, 1L).getLong(),
is(1L));
}
@Test
public void shouldProvideStreamForLong() throws Exception {
- testProvidesStream(new JcrValue(factories, PropertyType.LONG, 1L));
+ testProvidesStream(new JcrValue(factories, cache, PropertyType.LONG, 1L));
}
@Test
public void shouldProvideStringForLong() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.LONG, 1L).getString(),
is("1"));
+ assertThat(new JcrValue(factories, cache, PropertyType.LONG, 1L).getString(),
is("1"));
}
@Test
public void shouldProvideBooleanForString() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.STRING,
"true").getBoolean(), is(true));
- assertThat(new JcrValue(factories, PropertyType.STRING,
"yes").getBoolean(), is(false));
+ assertThat(new JcrValue(factories, cache, PropertyType.STRING,
"true").getBoolean(), is(true));
+ assertThat(new JcrValue(factories, cache, PropertyType.STRING,
"yes").getBoolean(), is(false));
}
@Test
public void shouldProvideDateForString() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.STRING,
"2008").getDate(), notNullValue());
+ assertThat(new JcrValue(factories, cache, PropertyType.STRING,
"2008").getDate(), notNullValue());
}
@Test( expected = ValueFormatException.class )
public void shouldNotProvideDateForInvalidString() throws Exception {
- new JcrValue(factories, PropertyType.STRING, "true").getDate();
+ new JcrValue(factories, cache, PropertyType.STRING, "true").getDate();
}
@Test
public void shouldProvideDoubleForString() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.STRING,
"1").getDouble(), is(1.0));
+ assertThat(new JcrValue(factories, cache, PropertyType.STRING,
"1").getDouble(), is(1.0));
}
@Test( expected = ValueFormatException.class )
public void shouldNotProvideDoubleForInvalidString() throws Exception {
- new JcrValue(factories, PropertyType.STRING, "true").getDouble();
+ new JcrValue(factories, cache, PropertyType.STRING,
"true").getDouble();
}
@Test
public void shouldProvideLongForString() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.STRING, "1").getLong(),
is(1L));
+ assertThat(new JcrValue(factories, cache, PropertyType.STRING,
"1").getLong(), is(1L));
}
@Test( expected = ValueFormatException.class )
public void shouldNotProvideLongForInvalidString() throws Exception {
- new JcrValue(factories, PropertyType.STRING, "true").getLong();
+ new JcrValue(factories, cache, PropertyType.STRING, "true").getLong();
}
@Test
public void shouldProvideStreamForString() throws Exception {
- testProvidesStream(new JcrValue(factories, PropertyType.STRING,
"true"));
+ testProvidesStream(new JcrValue(factories, cache, PropertyType.STRING,
"true"));
}
@Test
public void shouldProvideStringForString() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.STRING,
"true").getString(), is("true"));
+ assertThat(new JcrValue(factories, cache, PropertyType.STRING,
"true").getString(), is("true"));
}
@Test
public void shouldProvideBooleanForUuid() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.STRING,
UUID.randomUUID()).getBoolean(), is(false));
+ assertThat(new JcrValue(factories, cache, PropertyType.STRING,
UUID.randomUUID()).getBoolean(), is(false));
}
@Test( expected = ValueFormatException.class )
public void shouldNotProvideDateForUuid() throws Exception {
- new JcrValue(factories, PropertyType.STRING, UUID.randomUUID()).getDate();
+ new JcrValue(factories, cache, PropertyType.STRING,
UUID.randomUUID()).getDate();
}
@Test( expected = ValueFormatException.class )
public void shouldNotProvideDoubleForUuid() throws Exception {
- new JcrValue(factories, PropertyType.STRING, UUID.randomUUID()).getDouble();
+ new JcrValue(factories, cache, PropertyType.STRING,
UUID.randomUUID()).getDouble();
}
@Test( expected = ValueFormatException.class )
public void shouldNotProvideLongForUuid() throws Exception {
- new JcrValue(factories, PropertyType.STRING, UUID.randomUUID()).getLong();
+ new JcrValue(factories, cache, PropertyType.STRING,
UUID.randomUUID()).getLong();
}
@Test
public void shouldProvideStreamForUuid() throws Exception {
- testProvidesStream(new JcrValue(factories, PropertyType.STRING,
UUID.randomUUID()));
+ testProvidesStream(new JcrValue(factories, cache, PropertyType.STRING,
UUID.randomUUID()));
}
@Test
public void shouldProvideStringForUuid() throws Exception {
String expectedValue = "40d373f7-75ad-4d84-900e-c72ebd98abb9";
- assertThat(new JcrValue(factories, PropertyType.STRING,
UUID.fromString(expectedValue)).getString(), is(expectedValue));
+ assertThat(new JcrValue(factories, cache, PropertyType.STRING,
UUID.fromString(expectedValue)).getString(),
+ is(expectedValue));
}
@Test
public void shouldProvideLength() throws Exception {
- assertThat(new JcrValue(factories, PropertyType.STRING,
"test").getLength(), is(4L));
- assertThat(new JcrValue(factories, PropertyType.BINARY,
"test").getLength(), is(4L));
+ assertThat(new JcrValue(factories, cache, PropertyType.STRING,
"test").getLength(), is(4L));
+ assertThat(new JcrValue(factories, cache, PropertyType.BINARY,
"test").getLength(), is(4L));
}
private void testProvidesStream( JcrValue value ) throws Exception {
Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/SessionCacheTest.java
===================================================================
--- trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/SessionCacheTest.java 2009-03-20
18:22:45 UTC (rev 784)
+++ trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/SessionCacheTest.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -71,6 +71,7 @@
public class SessionCacheTest {
private ExecutionContext context;
+ private RepositoryNodeTypeManager repoTypes;
private JcrNodeTypeManager nodeTypes;
private Stopwatch sw;
private Graph store;
@@ -95,10 +96,12 @@
stub(session.namespaces()).toReturn(context.getNamespaceRegistry());
// Load up all the node types ...
- JcrNodeTypeSource nodeTypeSource = new JcrBuiltinNodeTypeSource(session);
- nodeTypeSource = new DnaBuiltinNodeTypeSource(session, nodeTypeSource);
- nodeTypeSource = new VehixNodeTypeSource(session, nodeTypeSource);
- nodeTypes = new JcrNodeTypeManager(session, nodeTypeSource);
+ JcrNodeTypeSource nodeTypeSource = null;
+ nodeTypeSource = new JcrBuiltinNodeTypeSource(this.context, nodeTypeSource);
+ nodeTypeSource = new DnaBuiltinNodeTypeSource(this.context, nodeTypeSource);
+ nodeTypeSource = new VehixNodeTypeSource(context, nodeTypeSource);
+ repoTypes = new RepositoryNodeTypeManager(context, nodeTypeSource);
+ nodeTypes = new JcrNodeTypeManager(this.context, repoTypes);
stub(session.nodeTypeManager()).toReturn(nodeTypes);
// Now set up the graph and session cache ...
@@ -113,24 +116,24 @@
private final List<JcrNodeType> primaryNodeTypes;
private final List<JcrNodeType> mixinNodeTypes;
- public VehixNodeTypeSource( JcrSession session,
+ public VehixNodeTypeSource( ExecutionContext context,
JcrNodeTypeSource predecessor ) {
super(predecessor);
this.primaryNodeTypes = new ArrayList<JcrNodeType>();
this.mixinNodeTypes = new ArrayList<JcrNodeType>();
- Name carName =
session.getExecutionContext().getValueFactories().getNameFactory().create("vehix:car");
- Name aircraftName =
session.getExecutionContext().getValueFactories().getNameFactory().create("vehix:aircraft");
+ Name carName =
context.getValueFactories().getNameFactory().create("vehix:car");
+ Name aircraftName =
context.getValueFactories().getNameFactory().create("vehix:aircraft");
JcrNodeType unstructured = findType(JcrNtLexicon.UNSTRUCTURED);
// Add in the "vehix:car" node type (which extends
"nt:unstructured") ...
- JcrNodeType car = new JcrNodeType(session, carName, Arrays.asList(new
NodeType[] {unstructured}),
- NO_PRIMARY_ITEM_NAME, NO_CHILD_NODES,
NO_PROPERTIES, NOT_MIXIN,
- ORDERABLE_CHILD_NODES);
+ JcrNodeType car = new JcrNodeType(context, (RepositoryNodeTypeManager)null,
carName,
+ Arrays.asList(new NodeType[]
{unstructured}), NO_PRIMARY_ITEM_NAME, NO_CHILD_NODES,
+ NO_PROPERTIES, NOT_MIXIN,
ORDERABLE_CHILD_NODES);
// Add in the "vehix:aircraft" node type (which extends
"nt:unstructured") ...
- JcrNodeType aircraft = new JcrNodeType(session, aircraftName,
Arrays.asList(new NodeType[] {unstructured}),
- NO_PRIMARY_ITEM_NAME, NO_CHILD_NODES,
NO_PROPERTIES, NOT_MIXIN,
- ORDERABLE_CHILD_NODES);
+ JcrNodeType aircraft = new JcrNodeType(context,
(RepositoryNodeTypeManager)null, aircraftName,
+ Arrays.asList(new NodeType[]
{unstructured}), NO_PRIMARY_ITEM_NAME,
+ NO_CHILD_NODES, NO_PROPERTIES,
NOT_MIXIN, ORDERABLE_CHILD_NODES);
primaryNodeTypes.addAll(Arrays.asList(new JcrNodeType[] {car, aircraft,}));
}
Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/TestNodeTypeSource.java
===================================================================
--- trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/TestNodeTypeSource.java 2009-03-20
18:22:45 UTC (rev 784)
+++ trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/TestNodeTypeSource.java 2009-03-20
18:40:19 UTC (rev 785)
@@ -29,6 +29,7 @@
import java.util.List;
import javax.jcr.PropertyType;
import javax.jcr.nodetype.NodeType;
+import org.jboss.dna.graph.ExecutionContext;
/**
* Node type source with additional node types that can be used for testing. This class
defines its own namespace for its types.
@@ -40,7 +41,7 @@
/** The list of mixin node types. */
private final List<JcrNodeType> mixinNodeTypes;
- TestNodeTypeSource( JcrSession session,
+ TestNodeTypeSource( ExecutionContext context,
JcrNodeTypeSource predecessor ) {
super(predecessor);
@@ -50,32 +51,35 @@
JcrNodeType base = findType(JcrNtLexicon.BASE);
if (base == null) {
- String baseTypeName =
JcrNtLexicon.BASE.getString(session.getExecutionContext().getNamespaceRegistry());
- String namespaceTypeName =
DnaLexicon.NAMESPACE.getString(session.getExecutionContext().getNamespaceRegistry());
+ String baseTypeName =
JcrNtLexicon.BASE.getString(context.getNamespaceRegistry());
+ String namespaceTypeName =
DnaLexicon.NAMESPACE.getString(context.getNamespaceRegistry());
throw new IllegalStateException(JcrI18n.supertypeNotFound.text(baseTypeName,
namespaceTypeName));
}
+
+
// Stubbing in child node and property definitions for now
JcrNodeType constrainedType = new JcrNodeType(
- session,
+ context,
+ NO_NODE_TYPE_MANAGER,
TestLexicon.CONSTRAINED_TYPE,
Arrays.asList(new NodeType[]
{base}),
NO_PRIMARY_ITEM_NAME,
NO_CHILD_NODES,
Arrays.asList(new
JcrPropertyDefinition[] {
- new
JcrPropertyDefinition(session, null,
+ new
JcrPropertyDefinition(context, null,
TestLexicon.CONSTRAINED_BINARY,
OnParentVersionBehavior.IGNORE.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,
PropertyType.BINARY, new String[] {"[,5)",
"[10, 20)", "(30,40]", "[50,]"}, false),
- new
JcrPropertyDefinition(session, null, TestLexicon.CONSTRAINED_DATE,
+ new
JcrPropertyDefinition(context, null, TestLexicon.CONSTRAINED_DATE,
OnParentVersionBehavior.IGNORE.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,
PropertyType.DATE, new String[] {
"[,+1945-08-01T01:30:00.000Z]",
"[+1975-08-01T01:30:00.000Z,)"}, false),
- new
JcrPropertyDefinition(session, null,
+ new
JcrPropertyDefinition(context, null,
TestLexicon.CONSTRAINED_DOUBLE,
OnParentVersionBehavior.IGNORE.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,
@@ -83,33 +87,33 @@
new
String[] {"[,5.0)", "[10.1, 20.2)",
"(30.3,40.4]", "[50.5,]"}, false),
- new
JcrPropertyDefinition(session, null, TestLexicon.CONSTRAINED_LONG,
+ new
JcrPropertyDefinition(context, null, TestLexicon.CONSTRAINED_LONG,
OnParentVersionBehavior.IGNORE.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,
PropertyType.LONG, new String[] {"[,5)",
"[10, 20)", "(30,40]", "[50,]"}, false),
- new
JcrPropertyDefinition(session, null, TestLexicon.CONSTRAINED_NAME,
+ new
JcrPropertyDefinition(context, null, TestLexicon.CONSTRAINED_NAME,
OnParentVersionBehavior.IGNORE.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,
PropertyType.NAME, new String[] {
"jcr:system", "dnatest:constrainedType"},
false),
- new
JcrPropertyDefinition(session, null, TestLexicon.CONSTRAINED_PATH,
+ new
JcrPropertyDefinition(context, null, TestLexicon.CONSTRAINED_PATH,
OnParentVersionBehavior.IGNORE.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,
PropertyType.PATH, new String[] {
// "/" +
JcrLexicon.Namespace.URI + ":system/*", "b", "/a/b/c"},
false),
"/jcr:system/*",
"b", "/a/b/c"}, false),
- new
JcrPropertyDefinition(session, null,
+ new
JcrPropertyDefinition(context, null,
TestLexicon.CONSTRAINED_REFERENCE,
OnParentVersionBehavior.IGNORE.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,
PropertyType.REFERENCE,
new
String[] {"dna:root",}, false),
- new
JcrPropertyDefinition(session, null,
+ new
JcrPropertyDefinition(context, null,
TestLexicon.CONSTRAINED_STRING,
OnParentVersionBehavior.IGNORE.getJcrValue(),
false, false, false, NO_DEFAULT_VALUES,