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 2006/08/07 10:11:36 UTC
svn commit: r429269 - in
/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi:
./ state/ version/ xml/
Author: angela
Date: Mon Aug 7 01:11:35 2006
New Revision: 429269
URL: http://svn.apache.org/viewvc?rev=429269&view=rev
Log:
work in progress
- remove NodeState.getPropertyId and replace by getPropertyState
- use ChildNodeEntry.getNodeState
- consequently remove utility methods getNodeState, getPropertyState on
ItemStateValidator, that converted ItemStateExceptions to RepositoryExc.
Modified:
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/HierarchyManagerImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PathResolver.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java
jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImporterImpl.java
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/HierarchyManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/HierarchyManagerImpl.java?rev=429269&r1=429268&r2=429269&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/HierarchyManagerImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/HierarchyManagerImpl.java Mon Aug 7 01:11:35 2006
@@ -218,7 +218,7 @@
// property is not the last element in the path
throw new PathNotFoundException(safeGetJCRPath(path));
}
- childId = parentState.getPropertyId(name);
+ childId = parentState.getPropertyState(name).getId();
} else {
// no such item
throw new PathNotFoundException(safeGetJCRPath(path));
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java?rev=429269&r1=429268&r2=429269&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java Mon Aug 7 01:11:35 2006
@@ -344,7 +344,7 @@
/**
* @inheritDoc
*/
- public synchronized ItemImpl getItem(org.apache.jackrabbit.name.Path path)
+ public synchronized ItemImpl getItem(Path path)
throws PathNotFoundException, AccessDeniedException, RepositoryException {
ItemId id = hierMgr.getItemId(path);
try {
@@ -455,11 +455,15 @@
while (iter.hasNext()) {
QName propName = (QName) iter.next();
-
- PropertyId id = nodeState.getPropertyId(propName);
- // check read access
- if (session.getAccessManager().canRead(id)) {
- return true;
+ try {
+ PropertyId id = nodeState.getPropertyState(propName).getPropertyId();
+ // check read access
+ if (session.getAccessManager().canRead(id)) {
+ return true;
+ }
+ } catch (ItemStateException e) {
+ // should not occur.
+ throw new RepositoryException(e);
}
}
@@ -486,10 +490,15 @@
while (iter.hasNext()) {
QName propName = (QName) iter.next();
- PropertyId id = nodeState.getPropertyId(propName);
- // check read access
- if (session.getAccessManager().canRead(id)) {
- childIds.add(id);
+ try {
+ PropertyId id = nodeState.getPropertyState(propName).getPropertyId();
+ // check read access
+ if (session.getAccessManager().canRead(id)) {
+ childIds.add(id);
+ }
+ } catch (ItemStateException e) {
+ // should not occur.
+ throw new RepositoryException(e);
}
}
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java?rev=429269&r1=429268&r2=429269&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java Mon Aug 7 01:11:35 2006
@@ -35,6 +35,8 @@
import org.apache.jackrabbit.jcr2spi.state.NodeReferences;
import org.apache.jackrabbit.jcr2spi.state.ItemStateValidator;
import org.apache.jackrabbit.jcr2spi.state.ChildNodeEntry;
+import org.apache.jackrabbit.jcr2spi.state.PropertyState;
+import org.apache.jackrabbit.jcr2spi.state.NoSuchItemStateException;
import org.apache.jackrabbit.jcr2spi.nodetype.NodeTypeManagerImpl;
import org.apache.jackrabbit.jcr2spi.nodetype.EffectiveNodeType;
import org.apache.jackrabbit.jcr2spi.nodetype.NodeTypeConflictException;
@@ -1275,7 +1277,7 @@
Operation an = AddNode.create(getNodeState(), nodeName, nodeTypeName, null);
itemStateMgr.execute(an);
- // retrieve id of state that has been created during execution of AddNode
+ // retrieve id of state that has been created during execution of AddNode
NodeId childId;
List cne = getNodeState().getChildNodeEntries(nodeName);
if (definition.allowsSameNameSiblings()) {
@@ -1298,11 +1300,16 @@
// TODO: protected due to usage within VersionImpl, VersionHistoryImpl (check for alternatives)
protected Property getProperty(QName qName) throws PathNotFoundException, RepositoryException {
checkStatus();
- PropertyId propId = getNodeState().getPropertyId(qName);
try {
- return (Property) itemMgr.getItem(propId);
+ PropertyState pState = getNodeState().getPropertyState(qName);
+ return (Property) itemMgr.getItem(pState.getId());
} catch (AccessDeniedException ade) {
throw new ItemNotFoundException(qName.toString());
+ } catch (NoSuchItemStateException e) {
+ throw new PathNotFoundException(qName.toString());
+ } catch (ItemStateException e) {
+ String msg = "Error while accessing property " + qName.toString();
+ throw new RepositoryException(msg, e);
}
}
@@ -1560,7 +1567,12 @@
QName propName = NameFormat.parse(relPath, session.getNamespaceResolver());
// check if property entry exists
if (getNodeState().hasPropertyName(propName)) {
- return getNodeState().getPropertyId(propName);
+ try {
+ return getNodeState().getPropertyState(propName).getPropertyId();
+ } catch (ItemStateException e) {
+ // should not occur due, since existance has been checked
+ throw new RepositoryException(e);
+ }
} else {
// there's no property with that name
return null;
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java?rev=429269&r1=429268&r2=429269&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ItemStateValidator.java Mon Aug 7 01:11:35 2006
@@ -468,9 +468,9 @@
// access restriction on prop.
if ((options & CHECK_ACCESS) == CHECK_ACCESS) {
- PropertyId pId = parentState.getPropertyId(propertyName);
// make sure current session is granted write access on new prop
- if (!mgrProvider.getAccessManager().isGranted(pId, new String[] {AccessManager.SET_PROPERTY_ACTION})) {
+ Path relPath = Path.create(propertyName, Path.INDEX_UNDEFINED);
+ if (!mgrProvider.getAccessManager().isGranted(parentState.getNodeId(), relPath, new String[] {AccessManager.SET_PROPERTY_ACTION})) {
throw new AccessDeniedException(safeGetJCRPath(parentState.getId()) + ": not allowed to create property with name " + propertyName);
}
}
@@ -739,7 +739,13 @@
}
// check for name collisions with existing properties
if (parentState.hasPropertyName(propertyName)) {
- PropertyId errorId = parentState.getPropertyId(propertyName);
+ PropertyId errorId = null;
+ try {
+ errorId = parentState.getPropertyState(propertyName).getPropertyId();
+ } catch (ItemStateException e) {
+ // should not occur. existance has been asserted before
+ throw new RepositoryException(e);
+ }
throw new ItemExistsException(safeGetJCRPath(errorId));
}
}
@@ -762,18 +768,22 @@
} else if (parentState.hasChildNodeEntry(nodeName)) {
// retrieve the existing node state that ev. conflicts with the new one.
- ChildNodeEntry entry = parentState.getChildNodeEntry(nodeName, 1);
- NodeState conflictingState = getNodeState(entry.getId());
-
- QNodeDefinition conflictDef = conflictingState.getDefinition();
- QNodeDefinition newDef = getApplicableNodeDefinition(nodeName, nodeTypeName, parentState);
-
- // check same-name sibling setting of both target and existing node
- if (!(conflictDef.allowsSameNameSiblings() && newDef.allowsSameNameSiblings())) {
- throw new ItemExistsException("Cannot add child node '"
- + nodeName.getLocalName() + "' to "
- + safeGetJCRPath(parentState.getNodeId())
- + ": colliding with same-named existing node.");
+ try {
+ ChildNodeEntry entry = parentState.getChildNodeEntry(nodeName, 1);
+ NodeState conflictingState = entry.getNodeState();
+ QNodeDefinition conflictDef = conflictingState.getDefinition();
+ QNodeDefinition newDef = getApplicableNodeDefinition(nodeName, nodeTypeName, parentState);
+
+ // check same-name sibling setting of both target and existing node
+ if (!(conflictDef.allowsSameNameSiblings() && newDef.allowsSameNameSiblings())) {
+ throw new ItemExistsException("Cannot add child node '"
+ + nodeName.getLocalName() + "' to "
+ + safeGetJCRPath(parentState.getNodeId())
+ + ": colliding with same-named existing node.");
+ }
+ } catch (ItemStateException e) {
+ // should not occur, since existence has been asserted before
+ throw new RepositoryException(e);
}
}
}
@@ -826,28 +836,6 @@
}
/**
- * Retrieves the state of the node at the given path.
- * <p/>
- * Note that access rights are <b><i>not</i></b> enforced!
- *
- * @param nodePath
- * @return
- * @throws PathNotFoundException
- * @throws RepositoryException
- */
- public NodeState getNodeState(Path nodePath) throws PathNotFoundException, RepositoryException {
- try {
- ItemId id = mgrProvider.getHierarchyManager().getItemId(nodePath);
- if (!id.denotesNode()) {
- throw new PathNotFoundException(safeGetJCRPath(nodePath));
- }
- return getNodeState((NodeId) id);
- } catch (ItemNotFoundException infe) {
- throw new PathNotFoundException(safeGetJCRPath(nodePath));
- }
- }
-
- /**
* Retrieves the state of the item with the specified id using the given
* item state manager.
* <p/>
@@ -861,23 +849,6 @@
public NodeState getNodeState(NodeId id) throws ItemNotFoundException, RepositoryException {
try {
return (NodeState) mgrProvider.getItemStateManager().getItemState(id);
- } catch (NoSuchItemStateException nsise) {
- throw new ItemNotFoundException(safeGetJCRPath(id));
- } catch (ItemStateException ise) {
- String msg = "internal error: failed to retrieve state of " + safeGetJCRPath(id);
- log.debug(msg);
- throw new RepositoryException(msg, ise);
- }
- }
-
- public PropertyState getPropertyState(NodeId parentId, QName propertyName) throws ItemNotFoundException, RepositoryException {
- NodeState nState = getNodeState(parentId);
- return getPropertyState(nState.getPropertyId(propertyName));
- }
-
- public PropertyState getPropertyState(PropertyId id) throws ItemNotFoundException, RepositoryException {
- try {
- return (PropertyState) mgrProvider.getItemStateManager().getItemState(id);
} catch (NoSuchItemStateException nsise) {
throw new ItemNotFoundException(safeGetJCRPath(id));
} catch (ItemStateException ise) {
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java?rev=429269&r1=429268&r2=429269&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java Mon Aug 7 01:11:35 2006
@@ -26,7 +26,6 @@
import org.apache.jackrabbit.name.QName;
import org.apache.jackrabbit.spi.NodeId;
import org.apache.jackrabbit.spi.ItemId;
-import org.apache.jackrabbit.spi.PropertyId;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
@@ -359,21 +358,6 @@
}
/**
- * Return the id of the Property with the specified name or <code>null</code>
- * if no property exists with the given name.
- *
- * @param propName
- * @return
- */
- public synchronized PropertyId getPropertyId(QName propName) {
- if (hasPropertyName(propName)) {
- return idFactory.createPropertyId(id, propName);
- } else {
- return null;
- }
- }
-
- /**
* Returns the <code>ChildNodeEntry</code> with the specified name and index
* or <code>null</code> if there's no matching entry.
*
@@ -459,8 +443,7 @@
}
ChildNodeEntry oldEntry = childNodeEntries.remove(oldName, index);
if (oldEntry != null) {
- ChildNodeEntry newEntry =
- childNodeEntries.add(newName, oldEntry.getId());
+ ChildNodeEntry newEntry = childNodeEntries.add(newName, oldEntry.getId());
notifyNodeAdded(newEntry);
notifyNodeRemoved(oldEntry);
return true;
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PathResolver.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PathResolver.java?rev=429269&r1=429268&r2=429269&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PathResolver.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PathResolver.java Mon Aug 7 01:11:35 2006
@@ -145,8 +145,7 @@
Path.PathElement elem = relPath.getElement(i);
// first try to resolve node
if (state.hasChildNodeEntry(elem.getName(), elem.getNormalizedIndex())) {
- ChildNodeEntry cne = state.getChildNodeEntry(elem.getName(),
- elem.getNormalizedIndex());
+ ChildNodeEntry cne = state.getChildNodeEntry(elem.getName(), elem.getNormalizedIndex());
if (cne.isAvailable()) {
state = cne.getNodeState();
} else {
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java?rev=429269&r1=429268&r2=429269&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/SessionItemStateManager.java Mon Aug 7 01:11:35 2006
@@ -1052,8 +1052,13 @@
// update/create corresponding property state
if (nState.hasPropertyName(QName.JCR_MIXINTYPES)) {
// execute value of existing property
- PropertyState pState = validator.getPropertyState(nState.getNodeId(), QName.JCR_MIXINTYPES);
- setPropertyStateValue(pState, QValue.create(mixinNames), PropertyType.NAME);
+ try {
+ PropertyState pState = nState.getPropertyState(QName.JCR_MIXINTYPES);
+ setPropertyStateValue(pState, QValue.create(mixinNames), PropertyType.NAME);
+ } catch (ItemStateException e) {
+ // should not occur, since existance has been asserted before
+ throw new RepositoryException(e);
+ }
} else {
// create new jcr:mixinTypes property
EffectiveNodeType ent = validator.getEffectiveNodeType(nState);
@@ -1069,9 +1074,14 @@
// remove the jcr:mixinTypes property state if already present
if (nState.hasPropertyName(QName.JCR_MIXINTYPES)) {
- PropertyState pState = validator.getPropertyState(nState.getNodeId(), QName.JCR_MIXINTYPES);
- int options = 0; // no checks required
- removeItemState(pState, options);
+ try {
+ PropertyState pState = nState.getPropertyState(QName.JCR_MIXINTYPES);
+ int options = 0; // no checks required
+ removeItemState(pState, options);
+ } catch (ItemStateException e) {
+ // should not occur, since existance has been asserted before
+ throw new RepositoryException(e);
+ }
} else {
// alternative: make sure changes on nodeState are reflected in state manager.
store(nState);
@@ -1086,30 +1096,40 @@
// use temp set to avoid ConcurrentModificationException
Iterator childProps = new HashSet(nState.getPropertyNames()).iterator();
while (childProps.hasNext()) {
- PropertyState childState = validator.getPropertyState(nState.getNodeId(), (QName) childProps.next());
- QName declNtName = childState.getDefinition().getDeclaringNodeType();
- // check if property has been defined by mixin type (or one of its supertypes)
- if (!ent.includesNodeType(declNtName)) {
- // the remaining effective node type doesn't include the
- // node type that declared this property, it is thus safe
- // to remove it
- int options = 0; // no checks required
- removeItemState(childState, options);
+ try {
+ PropertyState childState = nState.getPropertyState((QName) childProps.next());
+ QName declNtName = childState.getDefinition().getDeclaringNodeType();
+ // check if property has been defined by mixin type (or one of its supertypes)
+ if (!ent.includesNodeType(declNtName)) {
+ // the remaining effective node type doesn't include the
+ // node type that declared this property, it is thus safe
+ // to remove it
+ int options = 0; // no checks required
+ removeItemState(childState, options);
+ }
+ } catch (ItemStateException e) {
+ // ignore. cleanup will occure upon save anyway
+ log.error("Error while removing child node defined by removed mixin: {0}", e.getMessage());
}
}
// use temp array to avoid ConcurrentModificationException
Iterator childNodes = new ArrayList(nState.getChildNodeEntries()).iterator();
while (childNodes.hasNext()) {
- ChildNodeEntry entry = (ChildNodeEntry) childNodes.next();
- NodeState childState = validator.getNodeState(entry.getId());
- // check if node has been defined by mixin type (or one of its supertypes)
- QName declNtName = childState.getDefinition().getDeclaringNodeType();
- if (!ent.includesNodeType(declNtName)) {
- // the remaining effective node type doesn't include the
- // node type that declared this child node, it is thus safe
- // to remove it.
- int options = 0; // NOTE: referencial intergrity checked upon save.
- removeItemState(childState, options);
+ try {
+ ChildNodeEntry entry = (ChildNodeEntry) childNodes.next();
+ NodeState childState = entry.getNodeState();
+ // check if node has been defined by mixin type (or one of its supertypes)
+ QName declNtName = childState.getDefinition().getDeclaringNodeType();
+ if (!ent.includesNodeType(declNtName)) {
+ // the remaining effective node type doesn't include the
+ // node type that declared this child node, it is thus safe
+ // to remove it.
+ int options = 0; // NOTE: referencial intergrity checked upon save.
+ removeItemState(childState, options);
+ }
+ } catch (ItemStateException e) {
+ // ignore. cleanup will occure upon save anyway
+ log.error("Error while removing child property defined by removed mixin: {0}", e.getMessage());
}
}
}
@@ -1121,9 +1141,17 @@
* @inheritDoc
*/
public void visit(SetPropertyValue operation) throws ValueFormatException, LockException, ConstraintViolationException, AccessDeniedException, ItemExistsException, UnsupportedRepositoryOperationException, VersionException, RepositoryException {
- PropertyState pState = validator.getPropertyState(operation.getPropertyId());
- setPropertyStateValue(pState, operation.getValues(), operation.getPropertyType());
- transientStateMgr.addOperation(operation);
+ try {
+ PropertyState pState = (PropertyState) getItemState(operation.getPropertyId());
+ setPropertyStateValue(pState, operation.getValues(), operation.getPropertyType());
+ transientStateMgr.addOperation(operation);
+ } catch (NoSuchItemStateException nsise) {
+ throw new ItemNotFoundException(getHierarchyManager().safeGetJCRPath(operation.getPropertyId()));
+ } catch (ItemStateException ise) {
+ String msg = "internal error: failed to retrieve state of " + getHierarchyManager().safeGetJCRPath(operation.getPropertyId());
+ log.debug(msg);
+ throw new RepositoryException(msg, ise);
+ }
}
/**
@@ -1425,12 +1453,12 @@
while (tmpIter.hasNext()) {
ChildNodeEntry entry = (ChildNodeEntry) tmpIter.next();
try {
- NodeState child = validator.getNodeState(entry.getId());
+ NodeState child = entry.getNodeState();
// remove child node
// DIFF JR: don't recheck permission for child states
// DIFF JR: jr first calls recursive-method then removes c-n-entry
removeNodeState(targetState, child);
- } catch (ItemNotFoundException e) {
+ } catch (ItemStateException e) {
// ignore
// TODO: check if correct
}
@@ -1442,9 +1470,9 @@
while (tmpIter.hasNext()) {
QName propName = (QName) tmpIter.next();
try {
- PropertyState child = validator.getPropertyState(targetState.getNodeId(), propName);
+ PropertyState child = targetState.getPropertyState(propName);
removePropertyState(targetState, child);
- } catch (ItemNotFoundException e) {
+ } catch (ItemStateException e) {
// ignore
// TODO: check if correct
}
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java?rev=429269&r1=429268&r2=429269&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionHistoryImpl.java Mon Aug 7 01:11:35 2006
@@ -76,7 +76,7 @@
if (vhState.hasChildNodeEntry(QName.JCR_VERSIONLABELS)) {
ChildNodeEntry lnEntry = vhState.getChildNodeEntry(QName.JCR_VERSIONLABELS, Path.INDEX_DEFAULT);
try {
- labelNodeState = (NodeState) itemStateMgr.getItemState(lnEntry.getId());
+ labelNodeState = lnEntry.getNodeState();
} catch (ItemStateException e) {
throw new VersionException("nt:versionHistory requires a mandatory, autocreated child node jcr:versionLabels.");
}
@@ -366,9 +366,14 @@
private NodeId getVersionIdByLabel(QName qLabel) throws VersionException, RepositoryException {
if (labelNodeState.hasPropertyName(qLabel)) {
// retrieve reference property value -> and convert it to a NodeId
- PropertyId pId = labelNodeState.getPropertyId(qLabel);
- Node version = ((Property) itemMgr.getItem(pId)).getNode();
- return (NodeId) session.getHierarchyManager().getItemId(version);
+ try {
+ PropertyId pId = labelNodeState.getPropertyState(qLabel).getPropertyId();
+ Node version = ((Property) itemMgr.getItem(pId)).getNode();
+ return (NodeId) session.getHierarchyManager().getItemId(version);
+ } catch (ItemStateException e) {
+ // should not occur. existance of property state has been checked
+ throw new RepositoryException(e);
+ }
} else {
throw new VersionException("Version with label '" + qLabel + "' does not exist.");
}
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java?rev=429269&r1=429268&r2=429269&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/version/VersionManagerImpl.java Mon Aug 7 01:11:35 2006
@@ -80,7 +80,7 @@
}
nodeState = (NodeState) stateManager.getItemState(nodeState.getParentId());
}
- PropertyId propId = nodeState.getPropertyId(QName.JCR_ISCHECKEDOUT);
+ PropertyId propId = nodeState.getPropertyState(QName.JCR_ISCHECKEDOUT).getPropertyId();
PropertyState propState = (PropertyState) stateManager.getItemState(propId);
Boolean b = Boolean.valueOf(propState.getValue().getString());
Modified: jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImporterImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImporterImpl.java?rev=429269&r1=429268&r2=429269&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImporterImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImporterImpl.java Mon Aug 7 01:11:35 2006
@@ -22,6 +22,7 @@
import org.apache.jackrabbit.jcr2spi.state.ItemState;
import org.apache.jackrabbit.jcr2spi.state.SessionItemStateManager;
import org.apache.jackrabbit.jcr2spi.state.ChildNodeEntry;
+import org.apache.jackrabbit.jcr2spi.state.ItemStateException;
import org.apache.jackrabbit.jcr2spi.SessionImpl;
import org.apache.jackrabbit.jcr2spi.HierarchyManager;
import org.apache.jackrabbit.jcr2spi.SessionListener;
@@ -58,6 +59,7 @@
import org.apache.jackrabbit.name.MalformedPathException;
import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.QNodeDefinition;
+import org.apache.jackrabbit.spi.ItemId;
import org.apache.jackrabbit.value.QValue;
import org.apache.jackrabbit.value.ValueHelper;
import org.apache.jackrabbit.value.ValueFormat;
@@ -129,17 +131,28 @@
this.hierMgr = hierManager;
this.stateMgr = stateManager;
this.idFactory = idFactory;
+ this.uuidBehavior = uuidBehavior;
+ this.isWspImport = isWspImport;
// perform preliminary checks
- importTarget = validator.getNodeState(parentPath);
+ try {
+ ItemId id = hierMgr.getItemId(parentPath);
+ if (!id.denotesNode()) {
+ throw new PathNotFoundException(hierMgr.safeGetJCRPath(parentPath));
+ }
+ importTarget = validator.getNodeState((NodeId) id);
+
+ refTracker = new ReferenceChangeTracker();
+ parents = new Stack();
+ parents.push(importTarget);
+ } catch (ItemNotFoundException infe) {
+ throw new PathNotFoundException(hierMgr.safeGetJCRPath(parentPath));
+ }
+
+
// DIFF JR: remove check for overall writability on target-node.
- this.uuidBehavior = uuidBehavior;
- this.isWspImport = isWspImport;
- refTracker = new ReferenceChangeTracker();
- parents = new Stack();
- parents.push(importTarget);
}
//-----------------------------------------------------------< Importer >---
@@ -175,7 +188,13 @@
if (parent.hasChildNodeEntry(nodeInfo.getName())) {
// a node with that name already exists...
ChildNodeEntry entry = parent.getChildNodeEntry(nodeInfo.getName(), 1);
- NodeState existing = validator.getNodeState(entry.getId());
+ NodeState existing = null;
+ try {
+ existing = entry.getNodeState();
+ } catch (ItemStateException e) {
+ // should not occur. existance has been checked before
+ throw new RepositoryException(e);
+ }
QNodeDefinition def = existing.getDefinition();
if (!def.allowsSameNameSiblings()) {
// existing doesn't allow same-name siblings, check for conflicts
@@ -408,36 +427,41 @@
*
* see http://issues.apache.org/jira/browse/JCR-61
*/
- PropertyState conflicting = validator.getPropertyState(parent.getNodeId(), nodeInfo.getName());
- if (conflicting.getStatus() == ItemState.STATUS_NEW) {
- // assume this property has been imported as well;
- // rename conflicting property
- // @todo use better reversible escaping scheme to create unique name
- QName newName = new QName(nodeInfo.getName().getNamespaceURI(), nodeInfo.getName().getLocalName() + "_");
- if (parent.hasPropertyName(newName)) {
- newName = new QName(newName.getNamespaceURI(), newName.getLocalName() + "_");
- }
- // since name changes, need to find new applicable definition
- QPropertyDefinition propDef;
- if (conflicting.getValues().length == 1) {
- // could be single- or multi-valued (n == 1)
- try {
- // try single-valued
- propDef = validator.getApplicablePropertyDefinition(newName, conflicting.getType(), false, parent);
- } catch (ConstraintViolationException cve) {
- // try multi-valued
+ try {
+ PropertyState conflicting = parent.getPropertyState(nodeInfo.getName());
+ if (conflicting.getStatus() == ItemState.STATUS_NEW) {
+ // assume this property has been imported as well;
+ // rename conflicting property
+ // @todo use better reversible escaping scheme to create unique name
+ QName newName = new QName(nodeInfo.getName().getNamespaceURI(), nodeInfo.getName().getLocalName() + "_");
+ if (parent.hasPropertyName(newName)) {
+ newName = new QName(newName.getNamespaceURI(), newName.getLocalName() + "_");
+ }
+ // since name changes, need to find new applicable definition
+ QPropertyDefinition propDef;
+ if (conflicting.getValues().length == 1) {
+ // could be single- or multi-valued (n == 1)
+ try {
+ // try single-valued
+ propDef = validator.getApplicablePropertyDefinition(newName, conflicting.getType(), false, parent);
+ } catch (ConstraintViolationException cve) {
+ // try multi-valued
+ propDef = validator.getApplicablePropertyDefinition(newName, conflicting.getType(), true, parent);
+ }
+ } else {
+ // can only be multi-valued (n == 0 || n > 1)
propDef = validator.getApplicablePropertyDefinition(newName, conflicting.getType(), true, parent);
}
- } else {
- // can only be multi-valued (n == 0 || n > 1)
- propDef = validator.getApplicablePropertyDefinition(newName, conflicting.getType(), true, parent);
- }
- PropertyId newPId = idFactory.createPropertyId(parent.getNodeId(), newName);
- Operation ap = AddProperty.create(newPId, conflicting.getType(), propDef, conflicting.getValues());
- stateMgr.execute(ap);
- Operation rm = Remove.create(conflicting);
- stateMgr.execute(rm);
+ PropertyId newPId = idFactory.createPropertyId(parent.getNodeId(), newName);
+ Operation ap = AddProperty.create(newPId, conflicting.getType(), propDef, conflicting.getValues());
+ stateMgr.execute(ap);
+ Operation rm = Remove.create(conflicting);
+ stateMgr.execute(rm);
+ }
+ } catch (ItemStateException e) {
+ // should not occur. existance has been checked before
+ throw new RepositoryException(e);
}
}
@@ -450,21 +474,25 @@
Operation an = AddNode.create(parent, nodeInfo.getName(), nodeInfo.getNodeTypeName(), nodeInfo.getId());
stateMgr.execute(an);
// retrieve id of state that has been created during execution of AddNode
- NodeId childId;
- List cne = parent.getChildNodeEntries(nodeInfo.getName());
- if (def.allowsSameNameSiblings()) {
- // TODO: find proper solution. problem with same-name-siblings
- childId = ((ChildNodeEntry)cne.get(cne.size()-1)).getId();
- } else {
- childId = ((ChildNodeEntry)cne.get(0)).getId();
+ NodeState childState;
+ try {
+ List cne = parent.getChildNodeEntries(nodeInfo.getName());
+ if (def.allowsSameNameSiblings()) {
+ // TODO: find proper solution. problem with same-name-siblings
+ childState = ((ChildNodeEntry)cne.get(cne.size()-1)).getNodeState();
+ } else {
+ childState = ((ChildNodeEntry)cne.get(0)).getNodeState();
+ }
+ } catch (ItemStateException e) {
+ // should not occur, since nodestate is retrieved from cne-list
+ throw new RepositoryException(e);
}
- NodeState nodeState = validator.getNodeState(childId);
-
+
// and set mixin types
- PropertyId mixinPId = idFactory.createPropertyId(childId, QName.JCR_MIXINTYPES);
+ PropertyId mixinPId = idFactory.createPropertyId(childState.getNodeId(), QName.JCR_MIXINTYPES);
Operation sm = SetMixin.create(mixinPId, nodeInfo.getMixinNames());
stateMgr.execute(sm);
- return nodeState;
+ return childState;
}
}
@@ -481,25 +509,30 @@
TextValue[] tva = pi.getValues();
int infoType = pi.getType();
- PropertyState prop = null;
+ PropertyState propState = null;
QPropertyDefinition def;
if (nodeState.hasPropertyName(propName)) {
// a property with that name already exists...
- PropertyState existing = validator.getPropertyState(nodeState.getNodeId(), propName);
- def = existing.getDefinition();
- if (def.isProtected()) {
- // skip protected property
- log.debug("skipping protected property " + hierMgr.safeGetJCRPath(existing.getPropertyId()));
- return;
- }
- if (def.isAutoCreated()
- && (existing.getType() == infoType || infoType == PropertyType.UNDEFINED)
- && def.isMultiple() == existing.isMultiValued()) {
- // this property has already been auto-created, no need to create it
- prop = existing;
- } else {
- throw new ItemExistsException(hierMgr.safeGetJCRPath(existing.getPropertyId()));
+ try {
+ PropertyState existing = nodeState.getPropertyState(propName);
+ def = existing.getDefinition();
+ if (def.isProtected()) {
+ // skip protected property
+ log.debug("skipping protected property " + hierMgr.safeGetJCRPath(existing.getPropertyId()));
+ return;
+ }
+ if (def.isAutoCreated()
+ && (existing.getType() == infoType || infoType == PropertyType.UNDEFINED)
+ && def.isMultiple() == existing.isMultiValued()) {
+ // this property has already been auto-created, no need to create it
+ propState = existing;
+ } else {
+ throw new ItemExistsException(hierMgr.safeGetJCRPath(existing.getPropertyId()));
+ }
+ } catch (ItemStateException e) {
+ // should not occur. existance has been checked before
+ throw new RepositoryException(e);
}
} else {
// there's no property with that name, find applicable definition
@@ -530,21 +563,26 @@
}
QValue[] values = getPropertyValues(pi, targetType, def.isMultiple(), nsResolver);
- if (prop == null) {
+ if (propState == null) {
// create new property
PropertyId newPId = idFactory.createPropertyId(nodeState.getNodeId(), propName);
Operation ap = AddProperty.create(newPId, targetType, def, values);
stateMgr.execute(ap);
- prop = validator.getPropertyState(nodeState.getNodeId(), propName);
+ try {
+ propState = nodeState.getPropertyState(propName);
+ } catch (ItemStateException e) {
+ // should not occur since prop-state has been created before
+ throw new RepositoryException(e);
+ }
} else {
// modify value of existing property
- Operation sp = SetPropertyValue.create(prop, values, targetType);
+ Operation sp = SetPropertyValue.create(propState, values, targetType);
stateMgr.execute(sp);
}
// store reference for later resolution
- if (prop != null && prop.getType() == PropertyType.REFERENCE) {
- refTracker.processedReference(prop);
+ if (propState != null && propState.getType() == PropertyType.REFERENCE) {
+ refTracker.processedReference(propState);
}
}