You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/08/03 19:53:35 UTC
svn commit: r800478 - in /jackrabbit/trunk/jackrabbit-core/src:
main/java/org/apache/jackrabbit/core/ test/java/org/apache/jackrabbit/core/
Author: jukka
Date: Mon Aug 3 17:53:35 2009
New Revision: 800478
URL: http://svn.apache.org/viewvc?rev=800478&view=rev
Log:
JCR-1972: Preserving UUID and document version history on repository migration
Prepare to add the new checkin() signatures by cleaning up the deprecated versioning methods in NodeImpl.
Added a NodeImpl.getNodeState() method to avoid extra type casting.
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ProtectedItemModifier.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java?rev=800478&r1=800477&r2=800478&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java Mon Aug 3 17:53:35 2009
@@ -155,7 +155,7 @@
// fallback: try finding applicable definition
NodeImpl parent = (NodeImpl) getItem(state.getParentId());
- NodeState parentState = (NodeState) parent.getItemState();
+ NodeState parentState = parent.getNodeState();
ChildNodeEntry cne = parentState.getChildNodeEntry(state.getNodeId());
def = parent.getApplicableChildNodeDefinition(cne.getName(), state.getNodeTypeName());
state.setDefinitionId(def.unwrap().getId());
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java?rev=800478&r1=800477&r2=800478&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java Mon Aug 3 17:53:35 2009
@@ -297,7 +297,7 @@
}
if ((options & CHECK_CHECKED_OUT) == CHECK_CHECKED_OUT) {
NodeImpl node = (item.isNode()) ? (NodeImpl) item : (NodeImpl) item.getParent();
- if (!node.internalIsCheckedOut()) {
+ if (!node.isCheckedOut()) {
String msg = "Unable to perform operation. Node is checked-in.";
log.debug(msg);
throw new VersionException(msg);
@@ -345,7 +345,7 @@
}
if ((options & CHECK_CHECKED_OUT) == CHECK_CHECKED_OUT) {
NodeImpl node = (item.isNode()) ? (NodeImpl) item : (NodeImpl) item.getParent();
- if (!node.internalIsCheckedOut()) {
+ if (!node.isCheckedOut()) {
return false;
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java?rev=800478&r1=800477&r2=800478&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java Mon Aug 3 17:53:35 2009
@@ -62,6 +62,7 @@
import javax.jcr.version.Version;
import javax.jcr.version.VersionException;
import javax.jcr.version.VersionHistory;
+import javax.jcr.version.VersionManager;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
@@ -102,6 +103,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static org.apache.jackrabbit.spi.commons.name.NameConstants.JCR_ISCHECKEDOUT;
import static org.apache.jackrabbit.spi.commons.name.NameConstants.JCR_LIFECYCLE_POLICY;
import static org.apache.jackrabbit.spi.commons.name.NameConstants.JCR_CURRENT_LIFECYCLE_STATE;
import static org.apache.jackrabbit.spi.commons.name.NameConstants.MIX_LIFECYCLE;
@@ -145,6 +147,15 @@
}
/**
+ * Returns the node-state associated with this node.
+ *
+ * @return state associated with this node
+ */
+ NodeState getNodeState() {
+ return data.getNodeState();
+ }
+
+ /**
* Returns the id of the property at <code>relPath</code> or <code>null</code>
* if no property exists at <code>relPath</code>.
* <p/>
@@ -3213,8 +3224,8 @@
Path parentPath = parentNode.getPrimaryPath();
PathBuilder builder = new PathBuilder(parentPath);
- ChildNodeEntry entry = ((NodeState) parentNode.getItemState()).
- getChildNodeEntry(getNodeId());
+ ChildNodeEntry entry =
+ parentNode.getNodeState().getChildNodeEntry(getNodeId());
if (entry == null) {
String msg = "failed to build path of " + id + ": "
+ parentId + " has no child entry for "
@@ -3236,195 +3247,150 @@
/**
* {@inheritDoc}
*/
- public void update(String srcWorkspaceName)
- throws NoSuchWorkspaceException, AccessDeniedException,
- LockException, InvalidItemStateException, RepositoryException {
- ((VersionManagerImpl) session.getWorkspace().getVersionManager()).update(this, srcWorkspaceName);
+ public boolean isCheckedOut() throws RepositoryException {
+ // check state of this instance
+ sanityCheck();
+
+ // try shortcut first:
+ // if current node is 'new' we can safely consider it checked-out since
+ // otherwise it would had been impossible to add it in the first place
+ if (isNew()) {
+ return true;
+ }
+
+ // search nearest ancestor that is versionable
+ // FIXME should not only rely on existence of jcr:isCheckedOut property
+ // but also verify that node.isNodeType("mix:versionable")==true;
+ // this would have a negative impact on performance though...
+ try {
+ NodeState state = getNodeState();
+ while (!state.hasPropertyName(JCR_ISCHECKEDOUT)) {
+ ItemId parentId = state.getParentId();
+ if (parentId == null) {
+ // root reached or out of hierarchy
+ return true;
+ }
+ state = (NodeState)
+ session.getItemStateManager().getItemState(parentId);
+ }
+ PropertyId id = new PropertyId(state.getNodeId(), JCR_ISCHECKEDOUT);
+ PropertyState ps =
+ (PropertyState) session.getItemStateManager().getItemState(id);
+ return ps.getValues()[0].getBoolean();
+ } catch (ItemStateException e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ /**
+ * Returns the version manager of this workspace.
+ */
+ private VersionManagerImpl getVersionManagerImpl() {
+ return session.getWorkspaceImpl().getVersionManagerImpl();
}
/**
* {@inheritDoc}
*/
- @Deprecated
- public Version checkin()
- throws VersionException, UnsupportedRepositoryOperationException,
- InvalidItemStateException, LockException, RepositoryException {
- return session.getWorkspace().getVersionManager().checkin(getPath());
+ public void update(String srcWorkspaceName) throws RepositoryException {
+ getVersionManagerImpl().update(this, srcWorkspaceName);
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#checkin(String)} instead
*/
@Deprecated
- public void checkout()
- throws UnsupportedRepositoryOperationException, LockException,
- RepositoryException {
- session.getWorkspace().getVersionManager().checkout(getPath());
+ public Version checkin() throws RepositoryException {
+ return getVersionManagerImpl().checkin(getPath());
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#checkout(String)} instead
*/
@Deprecated
- public NodeIterator merge(String srcWorkspace, boolean bestEffort)
- throws NoSuchWorkspaceException, AccessDeniedException,
- VersionException, LockException, InvalidItemStateException,
- RepositoryException {
- return session.getWorkspace().getVersionManager().merge(getPath(), srcWorkspace, bestEffort);
+ public void checkout() throws RepositoryException {
+ getVersionManagerImpl().checkout(getPath());
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#merge(String, String, boolean)} instead
*/
@Deprecated
- public void cancelMerge(Version version)
- throws VersionException, InvalidItemStateException,
- UnsupportedRepositoryOperationException, RepositoryException {
- session.getWorkspace().getVersionManager().cancelMerge(getPath(), version);
+ public NodeIterator merge(String srcWorkspace, boolean bestEffort)
+ throws RepositoryException {
+ return getVersionManagerImpl().merge(
+ getPath(), srcWorkspace, bestEffort);
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#cancelMerge(String, Version)} instead
*/
@Deprecated
- public void doneMerge(Version version) throws VersionException,
- InvalidItemStateException, UnsupportedRepositoryOperationException,
- RepositoryException {
- session.getWorkspace().getVersionManager().doneMerge(getPath(), version);
+ public void cancelMerge(Version version) throws RepositoryException {
+ getVersionManagerImpl().cancelMerge(getPath(), version);
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#doneMerge(String, Version)} instead
*/
- public boolean isCheckedOut() throws RepositoryException {
- // check state of this instance
- sanityCheck();
- return internalIsCheckedOut();
+ @Deprecated
+ public void doneMerge(Version version) throws RepositoryException {
+ getVersionManagerImpl().doneMerge(getPath(), version);
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#restore(String, String, boolean)} instead
*/
@Deprecated
public void restore(String versionName, boolean removeExisting)
- throws VersionException, ItemExistsException,
- UnsupportedRepositoryOperationException, LockException,
- InvalidItemStateException, RepositoryException {
-
- // checks
- sanityCheck();
- session.getWorkspace().getVersionManager().restore(getPath(), versionName, removeExisting);
+ throws RepositoryException {
+ getVersionManagerImpl().restore(getPath(), versionName, removeExisting);
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#restore(String, Version, boolean)} instead
*/
@Deprecated
public void restore(Version version, boolean removeExisting)
- throws VersionException, ItemExistsException,
- UnsupportedRepositoryOperationException, LockException,
- RepositoryException {
-
- // do checks
- sanityCheck();
- session.getWorkspace().getVersionManager().restore(getPath(), version, removeExisting);
+ throws RepositoryException {
+ getVersionManagerImpl().restore(getPath(), version, removeExisting);
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#restore(String, Version, boolean)} instead
*/
@Deprecated
public void restore(Version version, String relPath, boolean removeExisting)
- throws PathNotFoundException, ItemExistsException, VersionException,
- ConstraintViolationException, UnsupportedRepositoryOperationException,
- LockException, InvalidItemStateException, RepositoryException {
-
- // do checks
- sanityCheck();
- String path = getPath() + "/" + relPath;
- session.getWorkspace().getVersionManager().restore(path, version, removeExisting);
+ throws RepositoryException {
+ getVersionManagerImpl().restore(
+ getPath() + "/" + relPath, version, removeExisting);
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#restoreByLabel(String, String, boolean)}
+ * instead
*/
@Deprecated
public void restoreByLabel(String versionLabel, boolean removeExisting)
- throws VersionException, ItemExistsException,
- UnsupportedRepositoryOperationException, LockException,
- InvalidItemStateException, RepositoryException {
-
- // do checks
- sanityCheck();
- session.getWorkspace().getVersionManager().restoreByLabel(getPath(), versionLabel, removeExisting);
+ throws RepositoryException {
+ getVersionManagerImpl().restoreByLabel(
+ getPath(), versionLabel, removeExisting);
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#getVersionHistory(String)} instead
*/
@Deprecated
- public VersionHistory getVersionHistory()
- throws UnsupportedRepositoryOperationException, RepositoryException {
- sanityCheck();
- return session.getWorkspace().getVersionManager().getVersionHistory(getPath());
+ public VersionHistory getVersionHistory() throws RepositoryException {
+ return getVersionManagerImpl().getVersionHistory(getPath());
}
/**
- * {@inheritDoc}
+ * Use {@link VersionManager#getBaseVersion(String)} instead
*/
@Deprecated
- public Version getBaseVersion()
- throws UnsupportedRepositoryOperationException, RepositoryException {
- // check state of this instance
- sanityCheck();
- return session.getWorkspace().getVersionManager().getBaseVersion(getPath());
- }
-
- //-----------------------------------< versioning support: implementation >
- /**
- * Determines the checked-out status of this node.
- * <p/>
- * A node is considered <i>checked-out</i> if it is versionable and
- * checked-out, or is non-versionable but its nearest versionable ancestor
- * is checked-out, or is non-versionable and there are no versionable
- * ancestors.
- *
- * @return a boolean
- * @see Node#isCheckedOut()
- * @throws RepositoryException if an error occurs
- */
- protected boolean internalIsCheckedOut() throws RepositoryException {
- /**
- * try shortcut first:
- * if current node is 'new' we can safely consider it checked-out
- * since otherwise it would had been impossible to add it in the first
- * place
- */
- if (isNew()) {
- return true;
- }
-
- // search nearest ancestor that is versionable
- /**
- * FIXME should not only rely on existence of jcr:isCheckedOut property
- * but also verify that node.isNodeType("mix:versionable")==true;
- * this would have a negative impact on performance though...
- */
- try {
- NodeState state = (NodeState) getItemState();
- while (!state.hasPropertyName(NameConstants.JCR_ISCHECKEDOUT)) {
- ItemId parentId = state.getParentId();
- if (parentId == null) {
- // root reached or out of hierarchy
- return true;
- }
- state = (NodeState) session.getItemStateManager().getItemState(parentId);
- }
- PropertyState ps = (PropertyState) session.getItemStateManager().getItemState(new PropertyId(state.getNodeId(), NameConstants.JCR_ISCHECKEDOUT));
- return ps.getValues()[0].getBoolean();
- } catch (ItemStateException e) {
- throw new RepositoryException(e.getMessage());
- }
+ public Version getBaseVersion() throws RepositoryException {
+ return getVersionManagerImpl().getBaseVersion(getPath());
}
//------------------------------------------------------< locking support >
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ProtectedItemModifier.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ProtectedItemModifier.java?rev=800478&r1=800477&r2=800478&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ProtectedItemModifier.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ProtectedItemModifier.java Mon Aug 3 17:53:35 2009
@@ -74,7 +74,7 @@
// check for name collisions
// TODO: improve. copied from NodeImpl
- NodeState thisState = (NodeState) parentImpl.getItemState();
+ NodeState thisState = parentImpl.getNodeState();
ChildNodeEntry cne = thisState.getChildNodeEntry(name, 1);
if (cne != null) {
// there's already a child node entry with that name;
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java?rev=800478&r1=800477&r2=800478&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java Mon Aug 3 17:53:35 2009
@@ -794,6 +794,10 @@
* {@inheritDoc}
*/
public Workspace getWorkspace() {
+ return getWorkspaceImpl();
+ }
+
+ WorkspaceImpl getWorkspaceImpl() {
return wsp;
}
@@ -1111,7 +1115,7 @@
destParentNode.renameChildNode(srcName.getName(), index, targetId, destName.getName());
} else {
// check shareable case
- if (((NodeState) targetNode.getItemState()).isShareable()) {
+ if (targetNode.getNodeState().isShareable()) {
String msg = "Moving a shareable node is not supported.";
log.debug(msg);
throw new UnsupportedRepositoryOperationException(msg);
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java?rev=800478&r1=800477&r2=800478&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java Mon Aug 3 17:53:35 2009
@@ -257,8 +257,11 @@
/**
* @see javax.jcr.Workspace#getVersionManager()
*/
- public VersionManager getVersionManager()
- throws UnsupportedRepositoryOperationException, RepositoryException {
+ public VersionManager getVersionManager() {
+ return getVersionManagerImpl();
+ }
+
+ VersionManagerImpl getVersionManagerImpl() {
if (versionMgr == null) {
versionMgr = new VersionManagerImpl(session, stateMgr, hierMgr);
}
Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java?rev=800478&r1=800477&r2=800478&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NodeImplTest.java Mon Aug 3 17:53:35 2009
@@ -101,7 +101,7 @@
* @throws RepositoryException
* @throws NotExecutableException
*/
- public void testInternalIsCheckedOut() throws RepositoryException, NotExecutableException {
+ public void testIsCheckedOut() throws RepositoryException, NotExecutableException {
Node n = testRootNode.addNode(nodeName1);
NodeImpl testNode = (NodeImpl) n.addNode(nodeName2);
testRootNode.save();
@@ -113,13 +113,13 @@
Session readOnly = getHelper().getReadOnlySession();
try {
NodeImpl tn = (NodeImpl) readOnly.getItem(testNode.getPath());
- assertTrue(tn.internalIsCheckedOut());
+ assertTrue(tn.isCheckedOut());
n.addMixin(mixVersionable);
testRootNode.save();
n.checkin();
- assertFalse(tn.internalIsCheckedOut());
+ assertFalse(tn.isCheckedOut());
} finally {
readOnly.logout();
// reset the denied read-access