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