You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2009/06/15 17:43:51 UTC
svn commit: r784824 - in /jackrabbit/trunk/jackrabbit-core/src/main:
java/org/apache/jackrabbit/core/nodetype/
resources/org/apache/jackrabbit/core/nodetype/
Author: stefan
Date: Mon Jun 15 15:43:51 2009
New Revision: 784824
URL: http://svn.apache.org/viewvc?rev=784824&view=rev
Log:
JCR-1947: JSR 283: Node Type Attribute Subtyping Rules
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java
jackrabbit/trunk/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.cnd
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java?rev=784824&r1=784823&r2=784824&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java Mon Jun 15 15:43:51 2009
@@ -55,6 +55,11 @@
// list of unnamed item definitions (i.e. residual definitions)
private final ArrayList unnamedItemDefs;
+ // flag indicating whether any included node type supports orderable child nodes
+ private boolean orderableChildNodes;
+
+ private Name primaryItemName;
+
/**
* private constructor.
*/
@@ -64,6 +69,8 @@
allNodeTypes = new TreeSet();
namedItemDefs = new HashMap();
unnamedItemDefs = new ArrayList();
+ orderableChildNodes = false;
+ primaryItemName = null;
}
/**
@@ -204,6 +211,34 @@
ent.internalMerge(base, true);
}
+ // resolve 'orderable child nodes' attribute value (JCR-1947)
+ if (ntd.hasOrderableChildNodes()) {
+ ent.orderableChildNodes = true;
+ } else {
+ Name[] nta = ent.getInheritedNodeTypes();
+ for (int i = 0; i < nta.length; i++) {
+ NodeTypeDef def = (NodeTypeDef) ntdCache.get(nta[i]);
+ if (def.hasOrderableChildNodes()) {
+ ent.orderableChildNodes = true;
+ break;
+ }
+ }
+ }
+
+ // resolve 'primary item' attribute value (JCR-1947)
+ if (ntd.getPrimaryItemName() != null) {
+ ent.primaryItemName = ntd.getPrimaryItemName();
+ } else {
+ Name[] nta = ent.getInheritedNodeTypes();
+ for (int i = 0; i < nta.length; i++) {
+ NodeTypeDef def = (NodeTypeDef) ntdCache.get(nta[i]);
+ if (def.getPrimaryItemName() != null) {
+ ent.primaryItemName = def.getPrimaryItemName();
+ break;
+ }
+ }
+ }
+
// we're done
return ent;
}
@@ -218,6 +253,18 @@
return new EffectiveNodeType();
}
+ /**
+ * Returns true if any of the included node types supports
+ * 'orderable child nodes'; returns alse otherwise.
+ */
+ public boolean hasOrderableChildNodes() {
+ return orderableChildNodes;
+ }
+
+ public Name getPrimaryItemName() {
+ return primaryItemName;
+ }
+
public Name[] getMergedNodeTypes() {
return (Name[]) mergedNodeTypes.toArray(new Name[mergedNodeTypes.size()]);
}
@@ -1151,6 +1198,15 @@
inheritedNodeTypes.add(nta[i]);
}
}
+
+ // update 'orderable child nodes' attribute value (JCR-1947)
+ if (other.hasOrderableChildNodes()) {
+ orderableChildNodes = true;
+ }
+ // update 'primary item' attribute value (JCR-1947)
+ if (primaryItemName == null && other.getPrimaryItemName() != null) {
+ primaryItemName = other.getPrimaryItemName();
+ }
}
protected Object clone() {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java?rev=784824&r1=784823&r2=784824&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeImpl.java Mon Jun 15 15:43:51 2009
@@ -305,13 +305,14 @@
* {@inheritDoc}
*/
public boolean hasOrderableChildNodes() {
- return ntd.hasOrderableChildNodes();
+ return ent.hasOrderableChildNodes();
}
/**
* {@inheritDoc}
*/
public String getPrimaryItemName() {
+ // TODO JCR-1947: JSR 283: Node Type Attribute Subtyping Rules
try {
Name piName = ntd.getPrimaryItemName();
if (piName != null) {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java?rev=784824&r1=784823&r2=784824&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java Mon Jun 15 15:43:51 2009
@@ -1466,6 +1466,15 @@
log.debug(msg);
throw new InvalidNodeTypeDefException(msg);
}
+ // check whether specified node type definition overrides
+ // a supertypes's primaryItem -> illegal (JCR-1947)
+ if (ntd.getPrimaryItemName() != null
+ && est.getPrimaryItemName() != null) {
+ String msg = "[" + name + "] primaryItemName is already specified by a supertype and must therefore not be overridden.";
+ log.debug(msg);
+ throw new InvalidNodeTypeDefException(msg);
+
+ }
} catch (NodeTypeConflictException ntce) {
String msg = "[" + name + "] failed to validate supertypes";
log.debug(msg);
Modified: jackrabbit/trunk/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.cnd
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.cnd?rev=784824&r1=784823&r2=784824&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.cnd (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.cnd Mon Jun 15 15:43:51 2009
@@ -195,7 +195,6 @@
+ * (nt:nodeType) = nt:nodeType protected abort
[rep:root] > nt:unstructured
- orderable
+ jcr:system (rep:system) = rep:system mandatory ignore
[rep:system]