You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/09/15 00:00:34 UTC
svn commit: r1170865 - in
/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype:
EffectiveNodeType.java EffectiveNodeTypeImpl.java
ItemDefinitionProviderImpl.java NodeTypeRegistryImpl.java
Author: mduerig
Date: Wed Sep 14 22:00:33 2011
New Revision: 1170865
URL: http://svn.apache.org/viewvc?rev=1170865&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP)
refactor: remove EffectiveNodeType interface
Added:
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java
- copied, changed from r1170856, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java
Modified:
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java
Copied: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java (from r1170856, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java)
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java?p2=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java&p1=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java&r1=1170856&r2=1170865&rev=1170865&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java Wed Sep 14 22:00:33 2011
@@ -43,8 +43,8 @@ import java.util.TreeSet;
* <p/>
* Instances of {@code EffectiveNodeType} are immutable.
*/
-public class EffectiveNodeTypeImpl implements EffectiveNodeType {
- private static final Logger log = LoggerFactory.getLogger(EffectiveNodeTypeImpl.class);
+public class EffectiveNodeType {
+ private static final Logger log = LoggerFactory.getLogger(EffectiveNodeType.class);
/** list of explicitly aggregated {i.e. merged) node types */
private final TreeSet<Name> mergedNodeTypes = new TreeSet<Name>();
@@ -64,9 +64,9 @@ public class EffectiveNodeTypeImpl imple
/** (optional) set of additional mixins supported on node type */
private Set<Name> supportedMixins;
- EffectiveNodeTypeImpl(TreeSet<Name> mergedNodeTypes, TreeSet<Name> inheritedNodeTypes, TreeSet<Name> allNodeTypes,
- Map<Name, List<QItemDefinition>> namedItemDefs, List<QItemDefinition> unnamedItemDefs,
- Set<Name> supportedMixins) {
+ EffectiveNodeType(TreeSet<Name> mergedNodeTypes, TreeSet<Name> inheritedNodeTypes, TreeSet<Name> allNodeTypes,
+ Map<Name, List<QItemDefinition>> namedItemDefs, List<QItemDefinition> unnamedItemDefs,
+ Set<Name> supportedMixins) {
this.mergedNodeTypes.addAll(mergedNodeTypes);
this.inheritedNodeTypes.addAll(inheritedNodeTypes);
@@ -84,22 +84,18 @@ public class EffectiveNodeTypeImpl imple
//--------------------------------------------------< EffectiveNodeType >---
- @Override
public Name[] getInheritedNodeTypes() {
return inheritedNodeTypes.toArray(new Name[inheritedNodeTypes.size()]);
}
- @Override
public Name[] getAllNodeTypes() {
return allNodeTypes.toArray(new Name[allNodeTypes.size()]);
}
- @Override
public Name[] getMergedNodeTypes() {
return mergedNodeTypes.toArray(new Name[mergedNodeTypes.size()]);
}
- @Override
public QNodeDefinition[] getAllQNodeDefinitions() {
if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) {
return QNodeDefinition.EMPTY_ARRAY;
@@ -124,7 +120,6 @@ public class EffectiveNodeTypeImpl imple
return defs.toArray(new QNodeDefinition[defs.size()]);
}
- @Override
public QPropertyDefinition[] getAllQPropertyDefinitions() {
if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) {
return QPropertyDefinition.EMPTY_ARRAY;
@@ -148,7 +143,6 @@ public class EffectiveNodeTypeImpl imple
return defs.toArray(new QPropertyDefinition[defs.size()]);
}
- @Override
public QNodeDefinition[] getAutoCreateQNodeDefinitions() {
// since auto-create items must have a name,
// we're only searching the named item definitions
@@ -169,7 +163,6 @@ public class EffectiveNodeTypeImpl imple
return defs.toArray(new QNodeDefinition[defs.size()]);
}
- @Override
public QPropertyDefinition[] getAutoCreateQPropertyDefinitions() {
// since auto-create items must have a name,
// we're only searching the named item definitions
@@ -190,7 +183,6 @@ public class EffectiveNodeTypeImpl imple
return defs.toArray(new QPropertyDefinition[defs.size()]);
}
- @Override
public QPropertyDefinition[] getMandatoryQPropertyDefinitions() {
// since mandatory items must have a name,
// we're only searching the named item definitions
@@ -211,7 +203,6 @@ public class EffectiveNodeTypeImpl imple
return defs.toArray(new QPropertyDefinition[defs.size()]);
}
- @Override
public QNodeDefinition[] getMandatoryQNodeDefinitions() {
// since mandatory items must have a name,
// we're only searching the named item definitions
@@ -232,7 +223,6 @@ public class EffectiveNodeTypeImpl imple
return defs.toArray(new QNodeDefinition[defs.size()]);
}
- @Override
public QNodeDefinition[] getNamedQNodeDefinitions(Name name) {
List<QItemDefinition> list = namedItemDefs.get(name);
if (list == null || list.isEmpty()) {
@@ -250,7 +240,6 @@ public class EffectiveNodeTypeImpl imple
return defs.toArray(new QNodeDefinition[defs.size()]);
}
- @Override
public QNodeDefinition[] getUnnamedQNodeDefinitions() {
if (unnamedItemDefs.isEmpty()) {
return QNodeDefinition.EMPTY_ARRAY;
@@ -267,7 +256,6 @@ public class EffectiveNodeTypeImpl imple
return defs.toArray(new QNodeDefinition[defs.size()]);
}
- @Override
public QPropertyDefinition[] getNamedQPropertyDefinitions(Name name) {
List<QItemDefinition> list = namedItemDefs.get(name);
if (list == null || list.isEmpty()) {
@@ -285,7 +273,6 @@ public class EffectiveNodeTypeImpl imple
return defs.toArray(new QPropertyDefinition[defs.size()]);
}
- @Override
public QPropertyDefinition[] getUnnamedQPropertyDefinitions() {
if (unnamedItemDefs.isEmpty()) {
return QPropertyDefinition.EMPTY_ARRAY;
@@ -302,22 +289,46 @@ public class EffectiveNodeTypeImpl imple
return defs.toArray(new QPropertyDefinition[defs.size()]);
}
- @Override
+ /**
+ * Determines whether this effective node type representation includes
+ * (either through inheritance or aggregation) the given node type.
+ *
+ * @param nodeTypeName name of node type
+ * @return {@code true} if the given node type is included, otherwise
+ * {@code false}
+ */
public boolean includesNodeType(Name nodeTypeName) {
return allNodeTypes.contains(nodeTypeName);
}
- @Override
+ /**
+ * Determines whether this effective node type representation includes
+ * (either through inheritance or aggregation) all of the given node types.
+ *
+ * @param nodeTypeNames array of node type names
+ * @return {@code true} if all of the given node types are included,
+ * otherwise {@code false}
+ */
public boolean includesNodeTypes(Name[] nodeTypeNames) {
return allNodeTypes.containsAll(Arrays.asList(nodeTypeNames));
}
- @Override
+ /**
+ * Determines whether this effective node type supports adding
+ * the specified mixin.
+ * @param mixin name of mixin type
+ * @return {@code true} if the mixin type is supported, otherwise
+ * {@code false}
+ */
public boolean supportsMixin(Name mixin) {
return supportedMixins == null || supportedMixins.contains(mixin);
}
- @Override
+ /**
+ * @param name
+ * @param definitionProvider
+ * @throws ConstraintViolationException
+ */
public void checkAddNodeConstraints(Name name, ItemDefinitionProvider definitionProvider)
throws ConstraintViolationException {
try {
@@ -329,7 +340,11 @@ public class EffectiveNodeTypeImpl imple
}
}
- @Override
+ /**
+ * @param name
+ * @param nodeTypeDefinition
+ *@param definitionProvider @throws ConstraintViolationException @throws NoSuchNodeTypeException
+ */
public void checkAddNodeConstraints(Name name, QNodeTypeDefinition nodeTypeDefinition,
ItemDefinitionProvider definitionProvider)
@@ -349,13 +364,27 @@ public class EffectiveNodeTypeImpl imple
}
}
- @Override
+ /**
+ * Returns {@code true} if a single node definition matching the
+ * specified {@code nodeName} is either mandatory or protected.
+ *
+ * @param nodeName
+ * @return {@code true} if a single node definition matching the
+ * specified {@code nodeName} is either mandatory or protected.
+ */
public boolean hasRemoveNodeConstraint(Name nodeName) {
QNodeDefinition[] defs = getNamedQNodeDefinitions(nodeName);
return hasRemoveConstraint(defs);
}
- @Override
+ /**
+ * Returns {@code true} if a single property definition matching the
+ * specified {@code propertyName} is either mandatory or protected.
+ *
+ * @param propertyName
+ * @return {@code true} if a single property definition matching the
+ * specified {@code propertyName} is either mandatory or protected.
+ */
public boolean hasRemovePropertyConstraint(Name propertyName) {
QPropertyDefinition[] defs = getNamedQPropertyDefinitions(propertyName);
return hasRemoveConstraint(defs);
@@ -416,10 +445,10 @@ public class EffectiveNodeTypeImpl imple
* @return
* @throws ConstraintViolationException
*/
- EffectiveNodeTypeImpl merge(EffectiveNodeTypeImpl other) throws ConstraintViolationException {
+ EffectiveNodeType merge(EffectiveNodeType other) throws ConstraintViolationException {
// create a copy of this instance and perform the merge on the copy to avoid a potentially
// inconsistent state of this instance if an exception is thrown during the merge.
- EffectiveNodeTypeImpl copy = new EffectiveNodeTypeImpl(mergedNodeTypes, inheritedNodeTypes, allNodeTypes,
+ EffectiveNodeType copy = new EffectiveNodeType(mergedNodeTypes, inheritedNodeTypes, allNodeTypes,
namedItemDefs, unnamedItemDefs, supportedMixins);
copy.internalMerge(other, false);
@@ -439,7 +468,7 @@ public class EffectiveNodeTypeImpl imple
* the merge is the result of an explicit aggregation
* @throws ConstraintViolationException
*/
- synchronized void internalMerge(EffectiveNodeTypeImpl other, boolean supertype)
+ synchronized void internalMerge(EffectiveNodeType other, boolean supertype)
throws ConstraintViolationException {
Name[] nta = other.getAllNodeTypes();
int includedCount = 0;
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java?rev=1170865&r1=1170864&r2=1170865&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java Wed Sep 14 22:00:33 2011
@@ -16,17 +16,11 @@
*/
package org.apache.jackrabbit.jcr2spi.nodetype;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-
import org.apache.jackrabbit.spi.IdFactory;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.NodeId;
import org.apache.jackrabbit.spi.PathFactory;
import org.apache.jackrabbit.spi.PropertyId;
-import org.apache.jackrabbit.spi.QItemDefinition;
import org.apache.jackrabbit.spi.QNodeDefinition;
import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.RepositoryService;
@@ -34,6 +28,11 @@ import org.apache.jackrabbit.spi.Session
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+
/**
* {@code ItemDefinitionManagerImpl}...
*/
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java?rev=1170865&r1=1170864&r2=1170865&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java Wed Sep 14 22:00:33 2011
@@ -358,14 +358,14 @@ public class NodeTypeRegistryImpl implem
}
// create empty effective node type instance
- EffectiveNodeTypeImpl ent = new EffectiveNodeTypeImpl(mergedNodeTypes,
+ EffectiveNodeType ent = new EffectiveNodeType(mergedNodeTypes,
inheritedNodeTypes, allNodeTypes, namedItemDefs,
unnamedItemDefs, supportedMixins);
// resolve supertypes recursively
Name[] supertypes = ntd.getSupertypes();
if (supertypes.length > 0) {
- EffectiveNodeTypeImpl effSuperType = (EffectiveNodeTypeImpl) getEffectiveNodeType(supertypes, ntdMap);
+ EffectiveNodeType effSuperType = getEffectiveNodeType(supertypes, ntdMap);
ent.internalMerge(effSuperType, true);
}
return ent;
@@ -438,14 +438,14 @@ public class NodeTypeRegistryImpl implem
// 3. build aggregate
EffectiveNodeTypeCache.Key requested = key;
- EffectiveNodeTypeImpl result = null;
+ EffectiveNodeType result = null;
synchronized (entCache) {
// build list of 'best' existing sub-aggregates
while (key.getNames().length > 0) {
// find the (sub) key that matches the current key the best
EffectiveNodeTypeCache.Key subKey = entCache.findBest(key);
if (subKey != null) {
- EffectiveNodeTypeImpl ent = (EffectiveNodeTypeImpl) entCache.get(subKey);
+ EffectiveNodeType ent = entCache.get(subKey);
if (result == null) {
result = ent;
} else {
@@ -464,9 +464,9 @@ public class NodeTypeRegistryImpl implem
// store new effective node type
entCache.put(ent);
if (result == null) {
- result = (EffectiveNodeTypeImpl) ent;
+ result = ent;
} else {
- result = result.merge((EffectiveNodeTypeImpl) ent);
+ result = result.merge(ent);
// store intermediate result (sub-aggregate)
entCache.put(result);
}