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();
     }
 
     /**