You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2005/02/09 15:46:05 UTC
svn commit: r153068 - in
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version:
VersionHistoryImpl.java VersionItemStateProvider.java
persistence/NativePVM.java
Author: tripod
Date: Wed Feb 9 06:46:04 2005
New Revision: 153068
URL: http://svn.apache.org/viewcvs?view=rev&rev=153068
Log:
- adjusting VersionHistory.getVersionByLabel() to spec 0.16.2
- avoiding creation of duplicate VHs
- add correct nodedef to version labels node
Modified:
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionItemStateProvider.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java?view=diff&r1=153067&r2=153068
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java Wed Feb 9 06:46:04 2005
@@ -80,7 +80,10 @@
try {
QName name = QName.fromJCRName(versionName, session.getNamespaceResolver());
InternalVersion v = history.getVersion(name);
- return v == null ? null : (Version) session.getNodeByUUID(v.getId());
+ if (v == null) {
+ throw new VersionException("No version with name '" + versionName + "' exists in this version history.");
+ }
+ return (Version) session.getNodeByUUID(v.getId());
} catch (IllegalNameException e) {
throw new RepositoryException(e);
} catch (UnknownPrefixException e) {
@@ -93,7 +96,10 @@
*/
public Version getVersionByLabel(String label) throws RepositoryException {
InternalVersion v = history.getVersionByLabel(label);
- return v == null ? null : (Version) session.getNodeByUUID(v.getId());
+ if (v == null) {
+ throw new VersionException("No version with label '" + label + "' exists in this version history.");
+ }
+ return (Version) session.getNodeByUUID(v.getId());
}
/**
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionItemStateProvider.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionItemStateProvider.java?view=diff&r1=153067&r2=153068
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionItemStateProvider.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionItemStateProvider.java Wed Feb 9 06:46:04 2005
@@ -65,11 +65,16 @@
*/
private NodeDefId NDEF_VERSION;
/**
- * node def id ofr a version history node state
+ * node def id for a version history node state
*/
private NodeDefId NDEF_VERSION_HISTORY;
/**
+ * node def id for a version labels node state
+ */
+ private NodeDefId NDEF_VERSION_LABELS;
+
+ /**
* creates a new version item state provide
*
* @param vMgr
@@ -83,6 +88,7 @@
NDEF_UNSTRUCTURED = new NodeDefId(getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_UNSTRUCTURED).getApplicableChildNodeDef(VersionManager.NODENAME_ROOTVERSION, NodeTypeRegistry.NT_UNSTRUCTURED).unwrap());
NDEF_VERSION = new NodeDefId(getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_VERSION_HISTORY).getApplicableChildNodeDef(VersionManager.NODENAME_ROOTVERSION, NodeTypeRegistry.NT_VERSION).unwrap());
NDEF_VERSION_HISTORY = new NodeDefId(getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_UNSTRUCTURED).getApplicableChildNodeDef(VersionManager.NODENAME_ROOTVERSION, NodeTypeRegistry.NT_VERSION_HISTORY).unwrap());
+ NDEF_VERSION_LABELS = new NodeDefId(getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_VERSION_HISTORY).getApplicableChildNodeDef(VersionManager.NODENAME_VERSION_LABELS, NodeTypeRegistry.NT_VERSION_LABELS).unwrap());
this.root = new HistoryRootNodeState(this, vMgr, parentId, rootId);
this.root.setDefinitionId(NDEF_UNSTRUCTURED);
@@ -173,6 +179,7 @@
// add version labels node state
String uuid = UUID.randomUUID().toString();
VersionLabelsNodeState vlns = new VersionLabelsNodeState(this, (InternalVersionHistory) vi, state.getUUID(), uuid);
+ vlns.setDefinitionId(NDEF_VERSION_LABELS);
state.addChildNodeEntry(VersionManager.NODENAME_VERSION_LABELS, uuid);
nodes.put(new NodeId(uuid), vlns);
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java?view=diff&r1=153067&r2=153068
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java Wed Feb 9 06:46:04 2005
@@ -26,9 +26,7 @@
import javax.jcr.RepositoryException;
import javax.jcr.Value;
-import javax.jcr.version.VersionException;
import java.util.HashMap;
-import java.util.LinkedList;
import java.util.Map;
import java.util.Iterator;
@@ -137,9 +135,9 @@
private HashMap idsByInternal= new HashMap();
/**
- * list of histories for fast retrieval
+ * map of versioned uuids. key=versionedUUID, value=externalId
*/
- private LinkedList histories = new LinkedList();
+ private HashMap versionedUUIDs = new HashMap();
/**
* the version histories. key=uuid, value=version history
@@ -200,7 +198,10 @@
idsByInternal.put(id.internalId, id);
}
if (id.type == PersistentId.TYPE_HISTORY) {
- histories.add(id.externalId);
+ // need to retrieve the versioned uuid in order to avoid collisions
+ PropertyState ps = stateMgr.getPropertyState(new PropertyId(state.getUUID(), PROPNAME_VERSIONABLE_ID));
+ String vid = (String) ps.getValues()[0].internalValue();
+ versionedUUIDs.put(vid, id.externalId);
}
}
initVirtualIds(state);
@@ -245,9 +246,10 @@
* @param uuid
* @return
*/
- private InternalVersionHistoryImpl getHistoryByVersionableUUID(String uuid) {
- // @TODO: implement
- return null;
+ private InternalVersionHistoryImpl getHistoryByVersionableUUID(String uuid)
+ throws RepositoryException {
+ String externalId = (String) versionedUUIDs.get(uuid);
+ return externalId == null ? null : (InternalVersionHistoryImpl) getVersionHistory(externalId);
}
/**
@@ -293,7 +295,7 @@
throw new RepositoryException(e);
}
- log.info("Created new version history " + hist.getId()+ " for " + node.safeGetJCRPath() + ". NumHistories=" + histories.size());
+ log.info("Created new version history " + hist.getId()+ " for " + node.safeGetJCRPath() + ". NumHistories=" + versionedUUIDs.size());
return hist;
}
@@ -328,7 +330,7 @@
* @throws RepositoryException
*/
public Iterator getVersionHistoryIds() throws RepositoryException {
- return histories.iterator();
+ return versionedUUIDs.values().iterator();
}
/**
@@ -338,7 +340,7 @@
* @throws RepositoryException
*/
public int getNumVersionHistories() throws RepositoryException {
- return histories.size();
+ return versionedUUIDs.size();
}
/**