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 2006/03/08 18:11:14 UTC
svn commit: r384271 - in
/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype:
NodeDefImpl.java NodeTypeDef.java
Author: stefan
Date: Wed Mar 8 09:11:12 2006
New Revision: 384271
URL: http://svn.apache.org/viewcvs?rev=384271&view=rev
Log:
JCR-333 NodeTypeDef depends on supertype ordering
Modified:
incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeDefImpl.java
incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDef.java
Modified: incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeDefImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeDefImpl.java?rev=384271&r1=384270&r2=384271&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeDefImpl.java (original)
+++ incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeDefImpl.java Wed Mar 8 09:11:12 2006
@@ -19,6 +19,7 @@
import org.apache.jackrabbit.name.QName;
import java.util.Arrays;
+import java.util.HashSet;
/**
* This class implements the <code>NodeDef</code> interface and additionally
@@ -29,29 +30,34 @@
/**
* The name of the default primary type.
*/
- private QName defaultPrimaryType = null;
+ private QName defaultPrimaryType;
/**
* The names of the required primary types.
*/
- private QName[] requiredPrimaryTypes = new QName[] { QName.NT_BASE };
+ private HashSet requiredPrimaryTypes;
/**
* The 'allowsSameNameSiblings' flag.
*/
- private boolean allowsSameNameSiblings = false;
+ private boolean allowsSameNameSiblings;
/**
* The identifier of this node definition. The identifier is lazily computed
* based on the characteristics of this node definition and reset on every
* attribute change.
*/
- private NodeDefId id = null;
+ private NodeDefId id;
/**
* Default constructor.
*/
public NodeDefImpl() {
+ defaultPrimaryType = null;
+ requiredPrimaryTypes = new HashSet();
+ requiredPrimaryTypes.add(QName.NT_BASE);
+ allowsSameNameSiblings = false;
+ id = null;
}
/**
@@ -71,12 +77,13 @@
* @param requiredPrimaryTypes
*/
public void setRequiredPrimaryTypes(QName[] requiredPrimaryTypes) {
- // reset id field in order to force lazy recomputation of identifier
- id = null;
if (requiredPrimaryTypes == null) {
throw new IllegalArgumentException("requiredPrimaryTypes can not be null");
}
- this.requiredPrimaryTypes = requiredPrimaryTypes;
+ // reset id field in order to force lazy recomputation of identifier
+ id = null;
+ this.requiredPrimaryTypes.clear();
+ this.requiredPrimaryTypes.addAll(Arrays.asList(requiredPrimaryTypes));
}
/**
@@ -172,7 +179,11 @@
* {@inheritDoc}
*/
public QName[] getRequiredPrimaryTypes() {
- return requiredPrimaryTypes;
+ if (requiredPrimaryTypes.isEmpty()) {
+ return QName.EMPTY_ARRAY;
+ }
+ return (QName[]) requiredPrimaryTypes.toArray(
+ new QName[requiredPrimaryTypes.size()]);
}
/**
@@ -209,7 +220,7 @@
if (obj instanceof NodeDefImpl) {
NodeDefImpl other = (NodeDefImpl) obj;
return super.equals(obj)
- && Arrays.equals(requiredPrimaryTypes, other.requiredPrimaryTypes)
+ && requiredPrimaryTypes.equals(other.requiredPrimaryTypes)
&& (defaultPrimaryType == null
? other.defaultPrimaryType == null
: defaultPrimaryType.equals(other.defaultPrimaryType))
Modified: incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDef.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDef.java?rev=384271&r1=384270&r2=384271&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDef.java (original)
+++ incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDef.java Wed Mar 8 09:11:12 2006
@@ -23,6 +23,7 @@
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
+import java.util.Iterator;
/**
* A <code>NodeTypeDef</code> holds the definition of a node type.
@@ -30,12 +31,12 @@
public class NodeTypeDef implements Cloneable {
private QName name;
- private QName[] supertypes;
+ private HashSet supertypes;
private boolean mixin;
private boolean orderableChildNodes;
private QName primaryItemName;
- private PropDef[] propDefs;
- private NodeDef[] nodeDefs;
+ private HashSet propDefs;
+ private HashSet nodeDefs;
private Set dependencies;
/**
@@ -45,9 +46,9 @@
dependencies = null;
name = null;
primaryItemName = null;
- nodeDefs = NodeDef.EMPTY_ARRAY;
- propDefs = PropDef.EMPTY_ARRAY;
- supertypes = QName.EMPTY_ARRAY;
+ nodeDefs = new HashSet();
+ propDefs = new HashSet();
+ supertypes = new HashSet();
mixin = false;
orderableChildNodes = false;
}
@@ -68,18 +69,17 @@
if (dependencies == null) {
dependencies = new HashSet();
// supertypes
- for (int i = 0; i < supertypes.length; i++) {
- dependencies.add(supertypes[i]);
- }
+ dependencies.addAll(supertypes);
// child node definitions
- for (int i = 0; i < nodeDefs.length; i++) {
+ for (Iterator iter = nodeDefs.iterator(); iter.hasNext();) {
+ NodeDef nd = (NodeDef) iter.next();
// default primary type
- QName ntName = nodeDefs[i].getDefaultPrimaryType();
+ QName ntName = nd.getDefaultPrimaryType();
if (ntName != null && !name.equals(ntName)) {
dependencies.add(ntName);
}
// required primary type
- QName[] ntNames = nodeDefs[i].getRequiredPrimaryTypes();
+ QName[] ntNames = nd.getRequiredPrimaryTypes();
for (int j = 0; j < ntNames.length; j++) {
if (ntNames[j] != null && !name.equals(ntNames[j])) {
dependencies.add(ntNames[j]);
@@ -87,10 +87,11 @@
}
}
// property definitions
- for (int i = 0; i < propDefs.length; i++) {
+ for (Iterator iter = propDefs.iterator(); iter.hasNext();) {
+ PropDef pd = (PropDef) iter.next();
// REFERENCE value constraints
- if (propDefs[i].getRequiredType() == PropertyType.REFERENCE) {
- ValueConstraint[] ca = propDefs[i].getValueConstraints();
+ if (pd.getRequiredType() == PropertyType.REFERENCE) {
+ ValueConstraint[] ca = pd.getValueConstraints();
if (ca != null) {
for (int j = 0; j < ca.length; j++) {
ReferenceConstraint rc = (ReferenceConstraint) ca[j];
@@ -126,7 +127,8 @@
*/
public void setSupertypes(QName[] names) {
resetDependencies();
- supertypes = names;
+ supertypes.clear();
+ supertypes.addAll(Arrays.asList(names));
}
/**
@@ -164,7 +166,8 @@
*/
public void setPropertyDefs(PropDef[] defs) {
resetDependencies();
- propDefs = defs;
+ propDefs.clear();
+ propDefs.addAll(Arrays.asList(defs));
}
/**
@@ -174,7 +177,8 @@
*/
public void setChildNodeDefs(NodeDef[] defs) {
resetDependencies();
- nodeDefs = defs;
+ nodeDefs.clear();
+ nodeDefs.addAll(Arrays.asList(defs));
}
/**
@@ -195,7 +199,10 @@
* <code>null</code> if not set.
*/
public QName[] getSupertypes() {
- return supertypes;
+ if (supertypes.isEmpty()) {
+ return QName.EMPTY_ARRAY;
+ }
+ return (QName[]) supertypes.toArray(new QName[supertypes.size()]);
}
/**
@@ -234,7 +241,10 @@
* <code>null</code> if not set.
*/
public PropDef[] getPropertyDefs() {
- return propDefs;
+ if (propDefs.isEmpty()) {
+ return PropDef.EMPTY_ARRAY;
+ }
+ return (PropDef[]) propDefs.toArray(new PropDef[propDefs.size()]);
}
/**
@@ -245,7 +255,10 @@
* <code>null</code> if not set.
*/
public NodeDef[] getChildNodeDefs() {
- return nodeDefs;
+ if (nodeDefs.isEmpty()) {
+ return NodeDef.EMPTY_ARRAY;
+ }
+ return (NodeDef[]) nodeDefs.toArray(new NodeDef[nodeDefs.size()]);
}
//-------------------------------------------< java.lang.Object overrides >
@@ -253,11 +266,11 @@
NodeTypeDef clone = new NodeTypeDef();
clone.name = name;
clone.primaryItemName = primaryItemName;
- clone.supertypes = (QName[]) supertypes.clone();
+ clone.supertypes = (HashSet) supertypes.clone();
clone.mixin = mixin;
clone.orderableChildNodes = orderableChildNodes;
- clone.nodeDefs = (NodeDef[]) nodeDefs.clone();
- clone.propDefs = (PropDef[]) propDefs.clone();
+ clone.nodeDefs = (HashSet) nodeDefs.clone();
+ clone.propDefs = (HashSet) propDefs.clone();
return clone;
}
@@ -269,11 +282,11 @@
NodeTypeDef other = (NodeTypeDef) obj;
return (name == null ? other.name == null : name.equals(other.name))
&& (primaryItemName == null ? other.primaryItemName == null : primaryItemName.equals(other.primaryItemName))
- && Arrays.equals(supertypes, other.supertypes)
+ && supertypes.equals(other.supertypes)
&& mixin == other.mixin
&& orderableChildNodes == other.orderableChildNodes
- && Arrays.equals(propDefs, other.propDefs)
- && Arrays.equals(nodeDefs, other.nodeDefs);
+ && propDefs.equals(other.propDefs)
+ && nodeDefs.equals(other.nodeDefs);
}
return false;
}