Index: dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java =================================================================== --- dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java (revision 823) +++ dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java (working copy) @@ -615,6 +615,17 @@ CheckArg.isNotNull(mixinName, "mixinName"); CheckArg.isNotZeroLength(mixinName, "mixinName"); + /* + * Special workaround for SeralizationTest (and others) in JR TCK that incorrectly test whether a repository supports + * versioning by trying to add mix:versionable to a node. The 1.0.1 says in section 4.11 that: + * "A node is versionable if and only if it has been assigned the mixin type mix:versionable, + * otherwise it is nonversionable. Repositories that do not support versioning will simply not + * provide this mixin type, whereas repositories that do support versioning must provide it." + */ + if (JcrMixLexicon.VERSIONABLE.getString(namespaces()).equals(mixinName)) { + return false; + } + JcrNodeType mixinCandidateType = cache.nodeTypes().getNodeType(mixinName); if (this.isLocked()) { Index: dna-jcr/src/main/java/org/jboss/dna/jcr/JcrBuiltinNodeTypeSource.java =================================================================== --- dna-jcr/src/main/java/org/jboss/dna/jcr/JcrBuiltinNodeTypeSource.java (revision 823) +++ dna-jcr/src/main/java/org/jboss/dna/jcr/JcrBuiltinNodeTypeSource.java (working copy) @@ -31,8 +31,6 @@ import javax.jcr.Value; 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; /** * {@link JcrNodeTypeSource} that provides built-in node types per the 1.0 specification. @@ -56,7 +54,7 @@ /* * 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 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 @@ -458,118 +456,119 @@ PropertyType.UNDEFINED, NO_CONSTRAINTS, true),}), NOT_MIXIN, ORDERABLE_CHILD_NODES); - JcrNodeType version = new JcrNodeType( - context, - NO_NODE_TYPE_MANAGER, - JcrNtLexicon.VERSION, - Arrays.asList(new JcrNodeType[] {base, referenceable}), - NO_PRIMARY_ITEM_NAME, - Arrays.asList(new JcrNodeDefinition[] {new JcrNodeDefinition( - context, - null, - JcrLexicon.FROZEN_NODE, - OnParentVersionBehavior.ABORT.getJcrValue(), - false, - false, - true, - false, - null, - new JcrNodeType[] {frozenNode}),}), - Arrays.asList(new JcrPropertyDefinition[] { - new JcrPropertyDefinition(context, null, JcrLexicon.CREATED, - OnParentVersionBehavior.ABORT.getJcrValue(), true, - true, true, NO_DEFAULT_VALUES, PropertyType.DATE, - NO_CONSTRAINTS, false), - new JcrPropertyDefinition(context, null, JcrLexicon.PREDECESSORS, - OnParentVersionBehavior.ABORT.getJcrValue(), false, - false, true, NO_DEFAULT_VALUES, - PropertyType.REFERENCE, NO_CONSTRAINTS, true), - 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 version = new JcrNodeType( +// context, +// NO_NODE_TYPE_MANAGER, +// JcrNtLexicon.VERSION, +// Arrays.asList(new JcrNodeType[] {base, referenceable}), +// NO_PRIMARY_ITEM_NAME, +// Arrays.asList(new JcrNodeDefinition[] {new JcrNodeDefinition( +// context, +// null, +// JcrLexicon.FROZEN_NODE, +// OnParentVersionBehavior.ABORT.getJcrValue(), +// false, +// false, +// true, +// false, +// null, +// new JcrNodeType[] {frozenNode}),}), +// Arrays.asList(new JcrPropertyDefinition[] { +// new JcrPropertyDefinition(context, null, JcrLexicon.CREATED, +// OnParentVersionBehavior.ABORT.getJcrValue(), true, +// true, true, NO_DEFAULT_VALUES, PropertyType.DATE, +// NO_CONSTRAINTS, false), +// new JcrPropertyDefinition(context, null, JcrLexicon.PREDECESSORS, +// OnParentVersionBehavior.ABORT.getJcrValue(), false, +// false, true, NO_DEFAULT_VALUES, +// PropertyType.REFERENCE, NO_CONSTRAINTS, true), +// 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( +// context, +// NO_NODE_TYPE_MANAGER, +// JcrNtLexicon.VERSION_LABELS, +// Arrays.asList(new JcrNodeType[] {base}), +// NO_PRIMARY_ITEM_NAME, +// NO_CHILD_NODES, +// Arrays.asList(new JcrPropertyDefinition[] {new JcrPropertyDefinition( +// context, +// null, +// ALL_NODES, +// OnParentVersionBehavior.ABORT.getJcrValue(), +// false, +// false, +// true, +// NO_DEFAULT_VALUES, +// PropertyType.REFERENCE, +// NO_CONSTRAINTS, +// false),}), +// NOT_MIXIN, UNORDERABLE_CHILD_NODES); +// +// JcrNodeType versionHistory = new JcrNodeType( +// context, +// NO_NODE_TYPE_MANAGER, +// JcrNtLexicon.VERSION_HISTORY, +// Arrays.asList(new JcrNodeType[] {base, referenceable}), +// NO_PRIMARY_ITEM_NAME, +// Arrays.asList(new JcrNodeDefinition[] { +// new JcrNodeDefinition(context, null, JcrLexicon.ROOT_VERSION, +// OnParentVersionBehavior.ABORT.getJcrValue(), true, +// true, true, false, JcrNtLexicon.VERSION, +// new JcrNodeType[] {version}), +// new JcrNodeDefinition(context, null, JcrLexicon.VERSION_LABELS, +// OnParentVersionBehavior.ABORT.getJcrValue(), true, +// true, true, false, JcrNtLexicon.VERSION_LABELS, +// new JcrNodeType[] {versionLabels}), +// new JcrNodeDefinition(context, null, ALL_NODES, +// OnParentVersionBehavior.ABORT.getJcrValue(), +// false, false, true, false, JcrNtLexicon.VERSION, +// new JcrNodeType[] {version}),}), +// Arrays.asList(new JcrPropertyDefinition[] {new JcrPropertyDefinition( +// context, +// null, +// JcrLexicon.VERSIONABLE_UUID, +// OnParentVersionBehavior.ABORT.getJcrValue(), +// true, +// true, +// true, +// NO_DEFAULT_VALUES, +// PropertyType.STRING, +// NO_CONSTRAINTS, +// false),}), +// NOT_MIXIN, UNORDERABLE_CHILD_NODES); +// +// Name CHILD_VERSION_HISTORY = new BasicName(JcrLexicon.Namespace.URI, "childVersionHistory"); +// JcrNodeType versionedChild = new JcrNodeType( +// context, +// NO_NODE_TYPE_MANAGER, +// JcrNtLexicon.VERSIONED_CHILD, +// Arrays.asList(new JcrNodeType[] {base}), +// NO_PRIMARY_ITEM_NAME, +// NO_CHILD_NODES, +// Arrays.asList(new JcrPropertyDefinition[] {new JcrPropertyDefinition( +// context, +// null, +// CHILD_VERSION_HISTORY, +// OnParentVersionBehavior.ABORT.getJcrValue(), +// true, +// true, +// true, +// NO_DEFAULT_VALUES, +// PropertyType.REFERENCE, +// NO_CONSTRAINTS, +// false),}), +// NOT_MIXIN, UNORDERABLE_CHILD_NODES); - JcrNodeType versionLabels = new JcrNodeType( - context, - NO_NODE_TYPE_MANAGER, - JcrNtLexicon.VERSION_LABELS, - Arrays.asList(new JcrNodeType[] {base}), - NO_PRIMARY_ITEM_NAME, - NO_CHILD_NODES, - Arrays.asList(new JcrPropertyDefinition[] {new JcrPropertyDefinition( - context, - null, - ALL_NODES, - OnParentVersionBehavior.ABORT.getJcrValue(), - false, - false, - true, - NO_DEFAULT_VALUES, - PropertyType.REFERENCE, - NO_CONSTRAINTS, - false),}), - NOT_MIXIN, UNORDERABLE_CHILD_NODES); + // Disabling version-related types until DNA supports versioning, as per section 4.11 of the 1.0.1 specification + nodeTypes.addAll(Arrays.asList(new JcrNodeType[] {base, unstructured, childNodeDefinition, file, folder, frozenNode, + hierarchyNode, linkedFile, nodeType, propertyDefinition, query, resource, nodeType /*, version, versionHistory, + versionLabels, versionedChild */})); - JcrNodeType versionHistory = new JcrNodeType( - context, - NO_NODE_TYPE_MANAGER, - JcrNtLexicon.VERSION_HISTORY, - Arrays.asList(new JcrNodeType[] {base, referenceable}), - NO_PRIMARY_ITEM_NAME, - Arrays.asList(new JcrNodeDefinition[] { - new JcrNodeDefinition(context, null, JcrLexicon.ROOT_VERSION, - OnParentVersionBehavior.ABORT.getJcrValue(), true, - true, true, false, JcrNtLexicon.VERSION, - new JcrNodeType[] {version}), - new JcrNodeDefinition(context, null, JcrLexicon.VERSION_LABELS, - OnParentVersionBehavior.ABORT.getJcrValue(), true, - true, true, false, JcrNtLexicon.VERSION_LABELS, - new JcrNodeType[] {versionLabels}), - new JcrNodeDefinition(context, null, ALL_NODES, - OnParentVersionBehavior.ABORT.getJcrValue(), - false, false, true, false, JcrNtLexicon.VERSION, - new JcrNodeType[] {version}),}), - Arrays.asList(new JcrPropertyDefinition[] {new JcrPropertyDefinition( - context, - null, - JcrLexicon.VERSIONABLE_UUID, - OnParentVersionBehavior.ABORT.getJcrValue(), - true, - true, - true, - NO_DEFAULT_VALUES, - PropertyType.STRING, - NO_CONSTRAINTS, - false),}), - NOT_MIXIN, UNORDERABLE_CHILD_NODES); - - Name CHILD_VERSION_HISTORY = new BasicName(JcrLexicon.Namespace.URI, "childVersionHistory"); - JcrNodeType versionedChild = new JcrNodeType( - context, - NO_NODE_TYPE_MANAGER, - JcrNtLexicon.VERSIONED_CHILD, - Arrays.asList(new JcrNodeType[] {base}), - NO_PRIMARY_ITEM_NAME, - NO_CHILD_NODES, - Arrays.asList(new JcrPropertyDefinition[] {new JcrPropertyDefinition( - context, - null, - CHILD_VERSION_HISTORY, - OnParentVersionBehavior.ABORT.getJcrValue(), - true, - true, - true, - NO_DEFAULT_VALUES, - PropertyType.REFERENCE, - NO_CONSTRAINTS, - false),}), - NOT_MIXIN, UNORDERABLE_CHILD_NODES); - - nodeTypes.addAll(Arrays.asList(new JcrNodeType[] {base, unstructured, childNodeDefinition, file, folder, - frozenNode, hierarchyNode, linkedFile, nodeType, propertyDefinition, query, resource, nodeType, version, - versionHistory, versionLabels, versionedChild})); - 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, @@ -582,37 +581,38 @@ NO_CONSTRAINTS, false)}), IS_A_MIXIN, UNORDERABLE_CHILD_NODES); - JcrNodeType versionable = new JcrNodeType( - context, - NO_NODE_TYPE_MANAGER, - JcrMixLexicon.VERSIONABLE, - Arrays.asList(new JcrNodeType[] {referenceable}), - NO_PRIMARY_ITEM_NAME, - NO_CHILD_NODES, - Arrays.asList(new JcrPropertyDefinition[] { - new JcrPropertyDefinition(context, null, JcrLexicon.BASE_VERSION, - OnParentVersionBehavior.IGNORE.getJcrValue(), - false, true, true, NO_DEFAULT_VALUES, - PropertyType.REFERENCE, NO_CONSTRAINTS, false), - new JcrPropertyDefinition(context, null, JcrLexicon.IS_CHECKED_OUT, - OnParentVersionBehavior.IGNORE.getJcrValue(), - true, true, true, new Value[] {trueValue}, - PropertyType.BOOLEAN, NO_CONSTRAINTS, false), - new JcrPropertyDefinition(context, null, JcrLexicon.MERGE_FAILED, - OnParentVersionBehavior.ABORT.getJcrValue(), - false, false, true, NO_DEFAULT_VALUES, - PropertyType.REFERENCE, NO_CONSTRAINTS, true), - new JcrPropertyDefinition(context, null, JcrLexicon.PREDECESSORS, - OnParentVersionBehavior.COPY.getJcrValue(), - false, true, true, NO_DEFAULT_VALUES, - PropertyType.REFERENCE, NO_CONSTRAINTS, true), - new JcrPropertyDefinition(context, null, JcrLexicon.VERSION_HISTORY, - OnParentVersionBehavior.COPY.getJcrValue(), - false, true, true, NO_DEFAULT_VALUES, - PropertyType.REFERENCE, NO_CONSTRAINTS, false),}), - IS_A_MIXIN, UNORDERABLE_CHILD_NODES); + // JcrNodeType versionable = new JcrNodeType( + // context, + // NO_NODE_TYPE_MANAGER, + // JcrMixLexicon.VERSIONABLE, + // Arrays.asList(new JcrNodeType[] {referenceable}), + // NO_PRIMARY_ITEM_NAME, + // NO_CHILD_NODES, + // Arrays.asList(new JcrPropertyDefinition[] { + // new JcrPropertyDefinition(context, null, JcrLexicon.BASE_VERSION, + // OnParentVersionBehavior.IGNORE.getJcrValue(), + // false, true, true, NO_DEFAULT_VALUES, + // PropertyType.REFERENCE, NO_CONSTRAINTS, false), + // new JcrPropertyDefinition(context, null, JcrLexicon.IS_CHECKED_OUT, + // OnParentVersionBehavior.IGNORE.getJcrValue(), + // true, true, true, new Value[] {trueValue}, + // PropertyType.BOOLEAN, NO_CONSTRAINTS, false), + // new JcrPropertyDefinition(context, null, JcrLexicon.MERGE_FAILED, + // OnParentVersionBehavior.ABORT.getJcrValue(), + // false, false, true, NO_DEFAULT_VALUES, + // PropertyType.REFERENCE, NO_CONSTRAINTS, true), + // new JcrPropertyDefinition(context, null, JcrLexicon.PREDECESSORS, + // OnParentVersionBehavior.COPY.getJcrValue(), + // false, true, true, NO_DEFAULT_VALUES, + // PropertyType.REFERENCE, NO_CONSTRAINTS, true), + // new JcrPropertyDefinition(context, null, JcrLexicon.VERSION_HISTORY, + // OnParentVersionBehavior.COPY.getJcrValue(), + // false, true, true, NO_DEFAULT_VALUES, + // PropertyType.REFERENCE, NO_CONSTRAINTS, false),}), + // IS_A_MIXIN, UNORDERABLE_CHILD_NODES); - nodeTypes.addAll(Arrays.asList(new JcrNodeType[] {lockable, referenceable, versionable})); + // Removing lockable as per section 4.11 of the JCR 1.0.1 specification + nodeTypes.addAll(Arrays.asList(new JcrNodeType[] {lockable, referenceable /*, versionable */})); } Index: dna-jcr/src/test/java/org/jboss/dna/jcr/TypeRegistrationTest.java =================================================================== --- dna-jcr/src/test/java/org/jboss/dna/jcr/TypeRegistrationTest.java (revision 823) +++ dna-jcr/src/test/java/org/jboss/dna/jcr/TypeRegistrationTest.java (working copy) @@ -55,7 +55,6 @@ private JcrNodeType referenceable; private JcrNodeType unstructured; private JcrNodeType root; - private JcrNodeType versionHistory; private JcrNodeType hierarchyNode; private JcrNodeType file; @@ -74,7 +73,6 @@ referenceable = repoTypeManager.getNodeType(JcrMixLexicon.REFERENCEABLE); unstructured = repoTypeManager.getNodeType(JcrNtLexicon.UNSTRUCTURED); root = repoTypeManager.getNodeType(DnaLexicon.ROOT); - versionHistory = repoTypeManager.getNodeType(JcrNtLexicon.VERSION_HISTORY); hierarchyNode = repoTypeManager.getNodeType(JcrNtLexicon.HIERARCHY_NODE); file = repoTypeManager.getNodeType(JcrNtLexicon.FILE); } @@ -548,12 +546,12 @@ context, AbstractJcrNodeTypeSource.NO_NODE_TYPE_MANAGER, nameFor(TEST_TYPE_NAME), - Arrays.asList(new JcrNodeType[] {versionHistory}), + Arrays.asList(new JcrNodeType[] {file}), AbstractJcrNodeTypeSource.NO_PRIMARY_ITEM_NAME, Arrays.asList(new JcrNodeDefinition[] {new JcrNodeDefinition( context, null, - JcrLexicon.ROOT_VERSION, + JcrLexicon.CONTENT, OnParentVersionBehavior.VERSION.getJcrValue(), false, false, false, false, JcrNtLexicon.BASE,