You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ju...@apache.org on 2013/03/25 15:57:53 UTC
svn commit: r1460695 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype:
EffectiveNodeType.java ReadOnlyNodeTypeManager.java
Author: jukka
Date: Mon Mar 25 14:57:52 2013
New Revision: 1460695
URL: http://svn.apache.org/r1460695
Log:
OAK-702: Optimize access to node type information
Use NodeTypeImpls instead of NodeTypes as a first step in streamlining access. WIP...
Drop unused methods.
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeType.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeType.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeType.java?rev=1460695&r1=1460694&r2=1460695&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeType.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeType.java Mon Mar 25 14:57:52 2013
@@ -53,39 +53,39 @@ public class EffectiveNodeType {
private static final Logger log = LoggerFactory.getLogger(EffectiveNodeType.class);
- private static final NodeType[] NO_MIXINS = new NodeType[0];
+ private static final NodeTypeImpl[] NO_MIXINS = new NodeTypeImpl[0];
- private final Map<String, NodeType> nodeTypes = Maps.newLinkedHashMap();
+ private final Map<String, NodeTypeImpl> nodeTypes = Maps.newLinkedHashMap();
private final ReadOnlyNodeTypeManager ntMgr;
EffectiveNodeType(
- NodeType primary, NodeType[] mixins,
+ NodeTypeImpl primary, NodeTypeImpl[] mixins,
ReadOnlyNodeTypeManager ntMgr) {
this.ntMgr = ntMgr;
addNodeType(checkNotNull(primary));
- for (NodeType mixin : checkNotNull(mixins)) {
+ for (NodeTypeImpl mixin : checkNotNull(mixins)) {
addNodeType(mixin);
}
}
- EffectiveNodeType(NodeType primary, ReadOnlyNodeTypeManager ntMgr) {
+ EffectiveNodeType(NodeTypeImpl primary, ReadOnlyNodeTypeManager ntMgr) {
this(primary, NO_MIXINS, ntMgr);
}
- private void addNodeType(NodeType type) {
+ private void addNodeType(NodeTypeImpl type) {
String name = type.getName();
if (!nodeTypes.containsKey(name)) {
nodeTypes.put(name, type);
NodeType[] supertypes = type.getDeclaredSupertypes();
if (supertypes.length > 1) {
for (NodeType supertype : supertypes) {
- addNodeType(supertype);
+ addNodeType((NodeTypeImpl) supertype); // FIXME
}
} else if (!type.isMixin() && !nodeTypes.containsKey(NT_BASE)) {
try {
- addNodeType(ntMgr.getNodeType(NT_BASE));
+ addNodeType((NodeTypeImpl) ntMgr.getNodeType(NT_BASE)); // FIXME
} catch (RepositoryException e) {
// TODO: ignore/warning/error?
}
@@ -286,36 +286,6 @@ public class EffectiveNodeType {
}
}
- public void checkAddChildNode(String name, NodeType nodeType) throws RepositoryException {
- NodeDefinition definition = getDefinition(name, nodeType);
-
- if (definition.isProtected()) {
- return;
- }
-
- if (nodeType == null) {
- if (!definition.getDeclaringNodeType().canAddChildNode(name)) {
- throw new ConstraintViolationException("Cannot add node '" + name + '\'');
- }
- } else {
- if (!definition.getDeclaringNodeType().canAddChildNode(name, nodeType.getName())) {
- throw new ConstraintViolationException("Cannot add node '" + name + "' of type '" + nodeType.getName() + '\'');
- }
- }
- }
-
- public void checkRemoveNode(String name, NodeType nodeType) throws RepositoryException {
- NodeDefinition definition = getDefinition(name, nodeType);
-
- if (definition.isProtected()) {
- return;
- }
-
- if (!definition.getDeclaringNodeType().canRemoveNode(name)) {
- throw new ConstraintViolationException("Cannot remove node '" + name + '\'');
- }
- }
-
public void checkMandatoryItems(Tree tree) throws ConstraintViolationException {
for (NodeType nodeType : nodeTypes.values()) {
for (PropertyDefinition pd : nodeType.getPropertyDefinitions()) {
@@ -429,31 +399,6 @@ public class EffectiveNodeType {
return getPropertyDefinition(propertyName, isMultiple, propertyType, true);
}
- /**
- * Calculates the applicable definition for the child node with the
- * specified name and node type.
- *
- * @param nodeName The internal oak name of the child node.
- * @param nodeType The target node type of the child.
- * @return the applicable definition for the child node with the specified
- * name and primary type.
- * @throws ConstraintViolationException If no matching definition can be found.
- * @throws RepositoryException If another error occurs.
- */
- private NodeDefinition getDefinition(String nodeName, NodeType nodeType)
- throws ConstraintViolationException {
- // FIXME: ugly hack to workaround sns-hack that was used to map sns-item definitions with node types.
- String nameToCheck = nodeName;
- if (nodeName.startsWith("jcr:childNodeDefinition")) {
- nameToCheck = nodeName.substring(0, "jcr:childNodeDefinition".length());
- }
- if (nodeName.startsWith("jcr:propertyDefinition")) {
- nameToCheck = nodeName.substring(0, "jcr:propertyDefinition".length());
- }
- return getNodeDefinition(
- nameToCheck, new EffectiveNodeType(nodeType, ntMgr));
- }
-
private static class DefinitionNamePredicate implements Predicate<ItemDefinition> {
private final String oakName;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java?rev=1460695&r1=1460694&r2=1460695&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java Mon Mar 25 14:57:52 2013
@@ -343,14 +343,19 @@ public abstract class ReadOnlyNodeTypeMa
@Override
public EffectiveNodeType getEffectiveNodeType(Node node)
throws RepositoryException {
- return new EffectiveNodeType(
- node.getPrimaryNodeType(), node.getMixinNodeTypes(), this);
+ NodeTypeImpl primary = (NodeTypeImpl) node.getPrimaryNodeType(); // FIXME
+ NodeType[] mixins = node.getMixinNodeTypes();
+ NodeTypeImpl[] mixinImpls = new NodeTypeImpl[mixins.length];
+ for (int i = 0; i < mixins.length; i++) {
+ mixinImpls[i] = (NodeTypeImpl) mixins[i]; // FIXME
+ }
+ return new EffectiveNodeType(primary, mixinImpls, this);
}
@Override
public EffectiveNodeType getEffectiveNodeType(Tree tree) throws RepositoryException {
- NodeType primaryType;
+ NodeTypeImpl primaryType;
PropertyState jcrPrimaryType = tree.getProperty(JCR_PRIMARYTYPE);
if (jcrPrimaryType != null) {
String ntName = jcrPrimaryType.getValue(STRING);
@@ -363,9 +368,9 @@ public abstract class ReadOnlyNodeTypeMa
if (jcrMixinType == null) {
return new EffectiveNodeType(primaryType, this);
} else {
- NodeType[] mixinTypes = new NodeType[jcrMixinType.count()];
+ NodeTypeImpl[] mixinTypes = new NodeTypeImpl[jcrMixinType.count()];
for (int i = 0; i < mixinTypes.length; i++) {
- mixinTypes[i] = getNodeType(jcrMixinType.getValue(Type.NAME, i));
+ mixinTypes[i] = internalGetNodeType(jcrMixinType.getValue(Type.NAME, i));
}
return new EffectiveNodeType(primaryType, mixinTypes, this);
}