diff --git a/source/java/org/alfresco/repo/avm/AVMRepository.java b/source/java/org/alfresco/repo/avm/AVMRepository.java
index 59d10f875b..37e17d1830 100644
--- a/source/java/org/alfresco/repo/avm/AVMRepository.java
+++ b/source/java/org/alfresco/repo/avm/AVMRepository.java
@@ -965,6 +965,20 @@ public class AVMRepository
return store.getNextVersionID();
}
+ /**
+ * Get the latest extant snapshotted version id.
+ * @param name The store name.
+ */
+ public int getLatestSnapshotID(String name)
+ {
+ AVMStore store = getAVMStoreByName(name);
+ if (store == null)
+ {
+ throw new AVMNotFoundException("Store not found.");
+ }
+ return store.getLastVersionID();
+ }
+
/**
* Get an AVMStore by name.
* @param name The name of the AVMStore.
diff --git a/source/java/org/alfresco/repo/avm/AVMServiceImpl.java b/source/java/org/alfresco/repo/avm/AVMServiceImpl.java
index 49a17fbc13..60b3bcf089 100644
--- a/source/java/org/alfresco/repo/avm/AVMServiceImpl.java
+++ b/source/java/org/alfresco/repo/avm/AVMServiceImpl.java
@@ -453,6 +453,21 @@ public class AVMServiceImpl implements AVMService
return fAVMRepository.getLatestVersionID(repName);
}
+ /**
+ * Get the latest snapshot id of a store.
+ * @param storeName The store name.
+ * @return The id of the latest extant version of the store.
+ * @throws AVMNotFoundException If storeName
does not exist.
+ */
+ public int getLatestSnapshotID(String storeName)
+ {
+ if (storeName == null)
+ {
+ throw new AVMBadArgumentException("Illegal null argument.");
+ }
+ return fAVMRepository.getLatestSnapshotID(storeName);
+ }
+
/**
* Create snapshots of a group of AVMStores.
* @param stores A List of AVMStore names.
diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTest.java b/source/java/org/alfresco/repo/avm/AVMServiceTest.java
index 7b87a5101c..941f3dee04 100644
--- a/source/java/org/alfresco/repo/avm/AVMServiceTest.java
+++ b/source/java/org/alfresco/repo/avm/AVMServiceTest.java
@@ -254,7 +254,7 @@ public class AVMServiceTest extends AVMServiceTestBase
VersionPathStuffer stuffer = new VersionPathStuffer();
stuffer.add(-1, "area:/a/b");
String nodeList = stuffer.toString();
- action.setParameterValue(AVMRevertListAction.PARAM_VERSION, 1);
+ action.setParameterValue(AVMRevertListAction.PARAM_VERSION, fService.getLatestSnapshotID("area"));
action.setParameterValue(AVMRevertListAction.PARAM_NODE_LIST, nodeList);
action.setParameterValue(AVMRevertListAction.PARAM_FLATTEN, true);
action.setParameterValue(AVMRevertListAction.PARAM_STORE, "area");
@@ -273,6 +273,8 @@ public class AVMServiceTest extends AVMServiceTestBase
new TxnWork());
diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a");
assertEquals(0, diffs.size());
+ System.out.println(recursiveList("area", -1, true));
+ System.out.println(recursiveList("main", -1, true));
}
catch (Exception e)
{
diff --git a/source/java/org/alfresco/repo/avm/AVMStore.java b/source/java/org/alfresco/repo/avm/AVMStore.java
index e2b3f1416c..55d3b50949 100644
--- a/source/java/org/alfresco/repo/avm/AVMStore.java
+++ b/source/java/org/alfresco/repo/avm/AVMStore.java
@@ -44,6 +44,11 @@ public interface AVMStore
* @return The next version to be snapshotted.
*/
public int getNextVersionID();
+
+ /**
+ * This gets the last extant version id.
+ */
+ public int getLastVersionID();
/**
* Set a new root for this store.
diff --git a/source/java/org/alfresco/repo/avm/AVMStoreImpl.java b/source/java/org/alfresco/repo/avm/AVMStoreImpl.java
index ce992656e3..e1e23c0664 100644
--- a/source/java/org/alfresco/repo/avm/AVMStoreImpl.java
+++ b/source/java/org/alfresco/repo/avm/AVMStoreImpl.java
@@ -609,6 +609,10 @@ public class AVMStoreImpl implements AVMStore, Serializable
{
dir = AVMDAOs.Instance().fAVMNodeDAO.getAVMStoreRoot(this, version);
}
+ if (dir == null)
+ {
+ return null;
+ }
// Add an entry for the root.
result.add(dir, "", write);
dir = (DirectoryNode)result.getCurrentNode();
@@ -796,6 +800,14 @@ public class AVMStoreImpl implements AVMStore, Serializable
return fNextVersionID;
}
+ /**
+ * This gets the last extant version id.
+ */
+ public int getLastVersionID()
+ {
+ return AVMDAOs.Instance().fVersionRootDAO.getMaxVersionID(this);
+ }
+
/**
* Set the root directory. Hibernate.
* @param root
diff --git a/source/java/org/alfresco/service/cmr/avm/AVMService.java b/source/java/org/alfresco/service/cmr/avm/AVMService.java
index 5d110a020d..00782224f2 100644
--- a/source/java/org/alfresco/service/cmr/avm/AVMService.java
+++ b/source/java/org/alfresco/service/cmr/avm/AVMService.java
@@ -303,6 +303,14 @@ public interface AVMService
*/
public int getLatestVersionID(String storeName);
+ /**
+ * Get the latest snapshot id of a store.
+ * @param storeName The store name.
+ * @return The id of the latest extant version of the store.
+ * @throws AVMNotFoundException If storeName
does not exist.
+ */
+ public int getLatestSnapshotID(String storeName);
+
/**
* Snapshot the given AVMStores. When this is called everything that has been added,
* deleted, or modified since the last time this function was called, is marked