You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2008/04/22 15:15:49 UTC
svn commit: r650514 - in
/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi:
./ nodetype/ state/ xml/
Author: angela
Date: Tue Apr 22 06:15:43 2008
New Revision: 650514
URL: http://svn.apache.org/viewvc?rev=650514&view=rev
Log:
JCR-1547: JCR2SPI: remove dependency to state-package within nodetype package
Modified:
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java?rev=650514&r1=650513&r2=650514&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java Tue Apr 22 06:15:43 2008
@@ -1262,7 +1262,7 @@
throws ItemExistsException, NoSuchNodeTypeException, VersionException,
ConstraintViolationException, LockException, RepositoryException {
- QNodeDefinition definition = session.getItemDefinitionProvider().getQNodeDefinition(getNodeState(), nodeName, nodeTypeName);
+ QNodeDefinition definition = session.getItemDefinitionProvider().getQNodeDefinition(getNodeState().getAllNodeTypeNames(), nodeName, nodeTypeName);
if (nodeTypeName == null) {
// use default node type
nodeTypeName = definition.getDefaultPrimaryType();
@@ -1555,7 +1555,7 @@
}
} catch (PathNotFoundException e) {
// item does not exist -> ignore and return null
- } catch (org.apache.jackrabbit.spi.commons.conversion.NameException e) {
+ } catch (NameException e) {
String msg = "Invalid relative path: " + relPath;
log.debug(msg);
throw new RepositoryException(msg, e);
@@ -1598,7 +1598,7 @@
// ignore -> return null;
}
}
- } catch (org.apache.jackrabbit.spi.commons.conversion.NameException e) {
+ } catch (NameException e) {
String msg = "failed to resolve property path " + relPath + " relative to " + safeGetJCRPath();
log.debug(msg);
throw new RepositoryException(msg, e);
@@ -1622,6 +1622,6 @@
int type,
boolean multiValued)
throws ConstraintViolationException, RepositoryException {
- return session.getItemDefinitionProvider().getQPropertyDefinition(getNodeState(), propertyName, type, multiValued);
+ return session.getItemDefinitionProvider().getQPropertyDefinition(getNodeState().getAllNodeTypeNames(), propertyName, type, multiValued);
}
}
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java?rev=650514&r1=650513&r2=650514&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java Tue Apr 22 06:15:43 2008
@@ -18,9 +18,9 @@
import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.QNodeDefinition;
-import org.apache.jackrabbit.jcr2spi.state.NodeState;
-import org.apache.jackrabbit.jcr2spi.state.PropertyState;
import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.PropertyId;
+import org.apache.jackrabbit.spi.NodeId;
import javax.jcr.RepositoryException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
@@ -43,17 +43,22 @@
/**
* Returns the <code>QNodeDefinition</code> for the specified node state.
*
- * @param nodeState
+ * @param parentNodeTypeNames
+ * @param nodeName
+ * @param ntName
+ * @param nodeId
* @return the <code>QNodeDefinition</code> for the specified node state.
* @throws RepositoryException
*/
- public QNodeDefinition getQNodeDefinition(NodeState nodeState) throws RepositoryException;
+ public QNodeDefinition getQNodeDefinition(Name[] parentNodeTypeNames,
+ Name nodeName, Name ntName,
+ NodeId nodeId) throws RepositoryException;
/**
* Returns the applicable child node definition for a child node with the
* specified name and node type.
*
- * @param parentState
+ * @param parentNodeTypeNames
* @param name
* @param nodeTypeName
* @return
@@ -61,7 +66,8 @@
* @throws ConstraintViolationException if no applicable child node definition
* could be found
*/
- public QNodeDefinition getQNodeDefinition(NodeState parentState, Name name, Name nodeTypeName)
+ public QNodeDefinition getQNodeDefinition(Name[] parentNodeTypeNames,
+ Name name, Name nodeTypeName)
throws NoSuchNodeTypeException, ConstraintViolationException;
/**
@@ -76,7 +82,8 @@
* @throws ConstraintViolationException if no applicable child node definition
* could be found
*/
- public QNodeDefinition getQNodeDefinition(EffectiveNodeType ent, Name name, Name nodeTypeName)
+ public QNodeDefinition getQNodeDefinition(EffectiveNodeType ent,
+ Name name, Name nodeTypeName)
throws NoSuchNodeTypeException, ConstraintViolationException;
/**
@@ -85,7 +92,23 @@
* @return the <code>QPropertyDefinition</code> for the specified property state.
* @throws RepositoryException
*/
- public QPropertyDefinition getQPropertyDefinition(PropertyState propertyState) throws RepositoryException;
+ /**
+ * Returns the <code>QPropertyDefinition</code> for the specified parameters.
+ *
+ * @param parentNodeTypeNames
+ * @param propertyName
+ * @param propertType
+ * @param isMultiValued
+ * @param propertyId Used to retrieve the definition from the persistent
+ * layer if it cannot be determined from the information present.
+ * @return
+ * @throws RepositoryException
+ */
+ public QPropertyDefinition getQPropertyDefinition(Name[] parentNodeTypeNames,
+ Name propertyName,
+ int propertType,
+ boolean isMultiValued,
+ PropertyId propertyId) throws RepositoryException;
/**
* Returns the applicable property definition for a property with the
@@ -118,7 +141,7 @@
* with required type UNDEFINED</li>
* </ul>
*
- * @param parentState
+ * @param parentNodeTypeNames
* @param name
* @param type
* @param multiValued
@@ -126,7 +149,7 @@
* @throws ConstraintViolationException if no applicable property definition
* could be found.
*/
- public QPropertyDefinition getQPropertyDefinition(NodeState parentState,
+ public QPropertyDefinition getQPropertyDefinition(Name[] parentNodeTypeNames,
Name name, int type,
boolean multiValued)
throws ConstraintViolationException, NoSuchNodeTypeException;
@@ -135,7 +158,7 @@
* Returns the applicable property definition for a property with the
* specified name and type. The multiValued flag is not taken into account
* in the selection algorithm. Other than
- * <code>{@link #getQPropertyDefinition(NodeState, Name, int, boolean)}</code>
+ * <code>{@link #getQPropertyDefinition(Name[], Name, int, boolean)}</code>
* this method does not take the multiValued flag into account in the
* selection algorithm. If there more than one applicable definitions then
* the following rules are applied:
@@ -146,14 +169,14 @@
* <li>single-value definitions are preferred to multiple-value definitions</li>
* </ul>
*
- * @param parentState
+ * @param parentNodeTypeNames
* @param name
* @param type
* @return
* @throws ConstraintViolationException if no applicable property definition
* could be found
*/
- public QPropertyDefinition getQPropertyDefinition(NodeState parentState,
+ public QPropertyDefinition getQPropertyDefinition(Name[] parentNodeTypeNames,
Name name, int type)
throws ConstraintViolationException, NoSuchNodeTypeException;
}
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java?rev=650514&r1=650513&r2=650514&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java Tue Apr 22 06:15:43 2008
@@ -23,10 +23,9 @@
import org.apache.jackrabbit.spi.RepositoryService;
import org.apache.jackrabbit.spi.SessionInfo;
import org.apache.jackrabbit.spi.QItemDefinition;
-import org.apache.jackrabbit.jcr2spi.hierarchy.PropertyEntry;
-import org.apache.jackrabbit.jcr2spi.state.NodeState;
-import org.apache.jackrabbit.jcr2spi.state.PropertyState;
import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.PropertyId;
+import org.apache.jackrabbit.spi.NodeId;
import javax.jcr.RepositoryException;
import javax.jcr.PropertyType;
@@ -67,27 +66,19 @@
/**
* @inheritDoc
*/
- public QNodeDefinition getQNodeDefinition(NodeState nodeState) throws RepositoryException {
- if (nodeState.getHierarchyEntry().getParent() == null) {
+ public QNodeDefinition getQNodeDefinition(Name[] parentNodeTypeNames,
+ Name nodeName, Name ntName,
+ NodeId nodeId) throws RepositoryException {
+ if (parentNodeTypeNames == null) {
return getRootNodeDefinition();
}
QNodeDefinition definition;
try {
- /*
- Don't use 'getEffectiveNodeType(NodeState.getAllNodeTypeNames()) here:
- for NEW-states the definition is always set upon creation.
- for all other states the definion must be retrieved only taking
- the effective nodetypes present on the parent into account
- any kind of transiently added mixins must not have an effect
- on the definition retrieved for an state that has been persisted
- before. The effective NT must be evaluated as if it had been
- evaluated upon creating the workspace state.
- */
- EffectiveNodeType ent = entProvider.getEffectiveNodeType(nodeState.getParent().getNodeTypeNames());
- EffectiveNodeType entTarget = getEffectiveNodeType(nodeState.getNodeTypeName());
- definition = getQNodeDefinition(ent, entTarget, nodeState.getName());
+ EffectiveNodeType ent = entProvider.getEffectiveNodeType(parentNodeTypeNames);
+ EffectiveNodeType entTarget = getEffectiveNodeType(ntName);
+ definition = getQNodeDefinition(ent, entTarget, nodeName);
} catch (RepositoryException e) {
- definition = service.getNodeDefinition(sessionInfo, nodeState.getNodeEntry().getWorkspaceId());
+ definition = service.getNodeDefinition(sessionInfo, nodeId);
}
return definition;
}
@@ -95,9 +86,9 @@
/**
* @inheritDoc
*/
- public QNodeDefinition getQNodeDefinition(NodeState parentState, Name name, Name nodeTypeName)
+ public QNodeDefinition getQNodeDefinition(Name[] parentNodeTypeNames, Name name, Name nodeTypeName)
throws NoSuchNodeTypeException, ConstraintViolationException {
- EffectiveNodeType ent = entProvider.getEffectiveNodeType(parentState.getAllNodeTypeNames());
+ EffectiveNodeType ent = entProvider.getEffectiveNodeType(parentNodeTypeNames);
EffectiveNodeType entTarget = getEffectiveNodeType(nodeTypeName);
return getQNodeDefinition(ent, entTarget, name);
}
@@ -113,23 +104,17 @@
/**
* @inheritDoc
*/
- public QPropertyDefinition getQPropertyDefinition(PropertyState propertyState) throws RepositoryException {
+ public QPropertyDefinition getQPropertyDefinition(Name[] parentNodeTypeNames,
+ Name propertyName,
+ int propertType,
+ boolean isMultiValued,
+ PropertyId propertyId) throws RepositoryException {
QPropertyDefinition definition;
try {
- /*
- Don't use 'getEffectiveNodeType(NodeState) here:
- for NEW-states the definition is always set upon creation.
- for all other states the definion must be retrieved only taking
- the effective nodetypes present on the parent into account
- any kind of transiently added mixins must not have an effect
- on the definition retrieved for an state that has been persisted
- before. The effective NT must be evaluated as if it had been
- evaluated upon creating the workspace state.
- */
- EffectiveNodeType ent = entProvider.getEffectiveNodeType(propertyState.getParent().getNodeTypeNames());
- definition = getQPropertyDefinition(ent, propertyState.getName(), propertyState.getType(), propertyState.isMultiValued(), true);
+ EffectiveNodeType ent = entProvider.getEffectiveNodeType(parentNodeTypeNames);
+ definition = getQPropertyDefinition(ent, propertyName, propertType, isMultiValued, true);
} catch (RepositoryException e) {
- definition = service.getPropertyDefinition(sessionInfo, ((PropertyEntry) propertyState.getHierarchyEntry()).getWorkspaceId());
+ definition = service.getPropertyDefinition(sessionInfo, propertyId);
}
return definition;
}
@@ -147,21 +132,21 @@
/**
* @inheritDoc
*/
- public QPropertyDefinition getQPropertyDefinition(NodeState parentState,
+ public QPropertyDefinition getQPropertyDefinition(Name[] parentNodeTypeNames,
Name name, int type,
boolean multiValued)
throws ConstraintViolationException, NoSuchNodeTypeException {
- EffectiveNodeType ent = entProvider.getEffectiveNodeType(parentState.getAllNodeTypeNames());
+ EffectiveNodeType ent = entProvider.getEffectiveNodeType(parentNodeTypeNames);
return getQPropertyDefinition(ent, name, type, multiValued, false);
}
/**
* @inheritDoc
*/
- public QPropertyDefinition getQPropertyDefinition(NodeState parentState,
+ public QPropertyDefinition getQPropertyDefinition(Name[] parentNodeTypeNames,
Name name, int type)
throws ConstraintViolationException, NoSuchNodeTypeException {
- EffectiveNodeType ent = entProvider.getEffectiveNodeType(parentState.getAllNodeTypeNames());
+ EffectiveNodeType ent = entProvider.getEffectiveNodeType(parentNodeTypeNames);
return getQPropertyDefinition(ent, name, type);
}
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java?rev=650514&r1=650513&r2=650514&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java Tue Apr 22 06:15:43 2008
@@ -590,7 +590,7 @@
try {
NodeState conflictingState = parentState.getChildNodeState(nodeName, Path.INDEX_DEFAULT);
QNodeDefinition conflictDef = conflictingState.getDefinition();
- QNodeDefinition newDef = mgrProvider.getItemDefinitionProvider().getQNodeDefinition(parentState, nodeName, nodeTypeName);
+ QNodeDefinition newDef = mgrProvider.getItemDefinitionProvider().getQNodeDefinition(parentState.getAllNodeTypeNames(), nodeName, nodeTypeName);
// check same-name sibling setting of both target and existing node
if (!(conflictDef.allowsSameNameSiblings() && newDef.allowsSameNameSiblings())) {
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java?rev=650514&r1=650513&r2=650514&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java Tue Apr 22 06:15:43 2008
@@ -164,7 +164,7 @@
// TODO: ev. reset the 'markModified' flag
if (StateUtility.isMovedState(this)) {
try {
- QNodeDefinition def = definitionProvider.getQNodeDefinition(this);
+ QNodeDefinition def = retrieveDefinition();
if (!def.equals(definition)) {
definition = def;
return true;
@@ -428,7 +428,7 @@
*/
public QNodeDefinition getDefinition() throws RepositoryException {
if (definition == null) {
- definition = definitionProvider.getQNodeDefinition(this);
+ definition = retrieveDefinition();
}
return definition;
}
@@ -558,6 +558,25 @@
childState.markModified();
}
+ private QNodeDefinition retrieveDefinition() throws RepositoryException {
+ QNodeDefinition def;
+ if (isRoot()) {
+ def = definitionProvider.getRootNodeDefinition();
+ } else {
+ /*
+ Don't use getAllNodeTypeNames() to retrieve the definition:
+ for NEW-states the definition is always set upon creation.
+ for all other states the definion must be retrieved only taking
+ the effective nodetypes present on the parent into account
+ any kind of transiently added mixins must not have an effect
+ on the definition retrieved for an state that has been persisted
+ before. The effective NT must be evaluated as if it had been
+ evaluated upon creating the workspace state.
+ */
+ def = definitionProvider.getQNodeDefinition(getParent().getNodeTypeNames(), getName(), getNodeTypeName(), getNodeEntry().getWorkspaceId());
+ }
+ return def;
+ }
/**
*
* @param childState
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java?rev=650514&r1=650513&r2=650514&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java Tue Apr 22 06:15:43 2008
@@ -215,7 +215,17 @@
*/
public QPropertyDefinition getDefinition() throws RepositoryException {
if (definition == null) {
- definition = definitionProvider.getQPropertyDefinition(this);
+ /*
+ Don't pass 'all-nodetypes from parent':
+ for NEW-states the definition is always set upon creation.
+ for all other states the definion must be retrieved only taking
+ the effective nodetypes present on the parent into account
+ any kind of transiently added mixins must not have an effect
+ on the definition retrieved for an state that has been persisted
+ before. The effective NT must be evaluated as if it had been
+ evaluated upon creating the workspace state.
+ */
+ definition = definitionProvider.getQPropertyDefinition(getParent().getNodeTypeNames(), getName(), getType(), multiValued, ((PropertyEntry) getHierarchyEntry()).getWorkspaceId());
}
return definition;
}
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java?rev=650514&r1=650513&r2=650514&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java Tue Apr 22 06:15:43 2008
@@ -261,7 +261,7 @@
NodeState parent = operation.getParentState();
ItemDefinitionProvider defProvider = mgrProvider.getItemDefinitionProvider();
- QNodeDefinition def = defProvider.getQNodeDefinition(parent, operation.getNodeName(), operation.getNodeTypeName());
+ QNodeDefinition def = defProvider.getQNodeDefinition(parent.getAllNodeTypeNames(), operation.getNodeName(), operation.getNodeTypeName());
addNodeState(parent, operation.getNodeName(), operation.getNodeTypeName(), operation.getUuid(), def, options);
transientStateMgr.addOperation(operation);
@@ -317,7 +317,7 @@
// retrieve applicable definition at the new place
ItemDefinitionProvider defProvider = mgrProvider.getItemDefinitionProvider();
- QNodeDefinition newDefinition = defProvider.getQNodeDefinition(destParent, operation.getDestinationName(), srcState.getNodeTypeName());
+ QNodeDefinition newDefinition = defProvider.getQNodeDefinition(destParent.getAllNodeTypeNames(), operation.getDestinationName(), srcState.getNodeTypeName());
// perform the move (modifying states)
srcParent.moveChildNodeEntry(destParent, srcState, operation.getDestinationName(), newDefinition);
@@ -365,7 +365,7 @@
} else {
// create new jcr:mixinTypes property
ItemDefinitionProvider defProvider = mgrProvider.getItemDefinitionProvider();
- QPropertyDefinition pd = defProvider.getQPropertyDefinition(nState, NameConstants.JCR_MIXINTYPES, PropertyType.NAME, true);
+ QPropertyDefinition pd = defProvider.getQPropertyDefinition(nState.getAllNodeTypeNames(), NameConstants.JCR_MIXINTYPES, PropertyType.NAME, true);
QValue[] mixinValue = getQValues(mixinNames, qValueFactory);
int options = ItemStateValidator.CHECK_LOCK | ItemStateValidator.CHECK_VERSIONING;
addPropertyState(nState, pd.getName(), pd.getRequiredType(), mixinValue, pd, options);
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java?rev=650514&r1=650513&r2=650514&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java Tue Apr 22 06:15:43 2008
@@ -397,6 +397,7 @@
* @throws RepositoryException
*/
private NodeState importNode(NodeInfo nodeInfo, NodeState parent) throws ConstraintViolationException, ItemNotFoundException, RepositoryException {
+ Name[] parentNtNames = parent.getAllNodeTypeNames();
if (parent.hasPropertyName(nodeInfo.getName())) {
/**
* a property with the same name already exists; if this property
@@ -406,7 +407,7 @@
*
* see http://issues.apache.org/jira/browse/JCR-61
*/
- PropertyState conflicting = parent.getPropertyState(nodeInfo.getName());
+ PropertyState conflicting = parent.getPropertyState(nodeInfo.getName());
if (conflicting.getStatus() == Status.NEW) {
// assume this property has been imported as well;
// rename conflicting property
@@ -421,14 +422,14 @@
// could be single- or multi-valued (n == 1)
try {
// try single-valued
- propDef = session.getItemDefinitionProvider().getQPropertyDefinition(parent, newName, conflicting.getType(), false);
+ propDef = session.getItemDefinitionProvider().getQPropertyDefinition(parentNtNames, newName, conflicting.getType(), false);
} catch (ConstraintViolationException cve) {
// try multi-valued
- propDef = session.getItemDefinitionProvider().getQPropertyDefinition(parent, newName, conflicting.getType(), true);
+ propDef = session.getItemDefinitionProvider().getQPropertyDefinition(parentNtNames, newName, conflicting.getType(), true);
}
} else {
// can only be multi-valued (n == 0 || n > 1)
- propDef = session.getItemDefinitionProvider().getQPropertyDefinition(parent, newName, conflicting.getType(), true);
+ propDef = session.getItemDefinitionProvider().getQPropertyDefinition(parentNtNames, newName, conflicting.getType(), true);
}
Operation ap = AddProperty.create(parent, newName, conflicting.getType(), propDef, conflicting.getValues());
@@ -439,7 +440,7 @@
}
// do create new nodeState
- QNodeDefinition def = session.getItemDefinitionProvider().getQNodeDefinition(parent, nodeInfo.getName(), nodeInfo.getNodeTypeName());
+ QNodeDefinition def = session.getItemDefinitionProvider().getQNodeDefinition(parentNtNames, nodeInfo.getName(), nodeInfo.getNodeTypeName());
if (def.isProtected()) {
log.debug("Skipping protected nodeState (" + nodeInfo.getName() + ")");
return null;
@@ -473,7 +474,7 @@
*
* @param pi
* @param parentState
- * @param nsResolver
+ * @param resolver
* @throws RepositoryException
* @throws ConstraintViolationException
*/
@@ -511,21 +512,22 @@
}
}
- if (def == null) {
- // there's no property with that name, find applicable definition
- if (tva.length == 1) {
- // could be single- or multi-valued (n == 1)
- def = session.getItemDefinitionProvider().getQPropertyDefinition(parentState, propName, infoType);
- } else {
- // can only be multi-valued (n == 0 || n > 1)
- def = session.getItemDefinitionProvider().getQPropertyDefinition(parentState, propName, infoType, true);
- }
- if (def.isProtected()) {
- // skip protected property
- log.debug("skipping protected property " + propName);
- return;
- }
- }
+ Name[] parentNtNames = parentState.getAllNodeTypeNames();
+ if (def == null) {
+ // there's no property with that name, find applicable definition
+ if (tva.length == 1) {
+ // could be single- or multi-valued (n == 1)
+ def = session.getItemDefinitionProvider().getQPropertyDefinition(parentNtNames, propName, infoType);
+ } else {
+ // can only be multi-valued (n == 0 || n > 1)
+ def = session.getItemDefinitionProvider().getQPropertyDefinition(parentNtNames, propName, infoType, true);
+ }
+ if (def.isProtected()) {
+ // skip protected property
+ log.debug("skipping protected property " + propName);
+ return;
+ }
+ }
// retrieve the target property type needed for creation of QValue(s)
// including an eventual conversion. the targetType is then needed for