From 0a76193084eb0f60a8b1469d20f307f07ef356b6 Mon Sep 17 00:00:00 2001 From: Britt Park Date: Thu, 4 Jan 2007 14:59:29 +0000 Subject: [PATCH] AVM nodes get a useful version id. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4727 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/avm/AVMRepository.java | 4 +-- .../org/alfresco/repo/avm/AVMServiceTest.java | 29 +++++++++++++++++++ .../org/alfresco/repo/avm/AVMStoreImpl.java | 10 +++---- .../repo/avm/LayeredDirectoryNodeImpl.java | 11 +++++++ .../repo/avm/LayeredFileNodeImpl.java | 5 +++- source/java/org/alfresco/repo/avm/Lookup.java | 2 +- .../repo/avm/PlainDirectoryNodeImpl.java | 2 ++ .../alfresco/repo/avm/PlainFileNodeImpl.java | 9 ++++-- 8 files changed, 61 insertions(+), 11 deletions(-) diff --git a/source/java/org/alfresco/repo/avm/AVMRepository.java b/source/java/org/alfresco/repo/avm/AVMRepository.java index d1dbf3b66e..a8aea075d7 100644 --- a/source/java/org/alfresco/repo/avm/AVMRepository.java +++ b/source/java/org/alfresco/repo/avm/AVMRepository.java @@ -447,7 +447,7 @@ public class AVMRepository { dstNode = new PlainFileNodeImpl((PlainFileNode)srcNode, dstRepo); } - dstNode.setVersionID(dstRepo.getNextVersionID()); + // dstNode.setVersionID(dstRepo.getNextVersionID()); dstNode.setAncestor(srcNode); dirNode.putChild(name, dstNode); dirNode.updateModTime(); @@ -682,7 +682,7 @@ public class AVMRepository } srcDir.removeChild(sPath, srcName); srcDir.updateModTime(); - dstNode.setVersionID(dstRepo.getNextVersionID()); + // dstNode.setVersionID(dstRepo.getNextVersionID()); if (child != null) { dstNode.setAncestor(child); diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTest.java b/source/java/org/alfresco/repo/avm/AVMServiceTest.java index 73d59f0210..d19dd97c45 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceTest.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceTest.java @@ -71,6 +71,35 @@ import org.alfresco.util.Pair; */ public class AVMServiceTest extends AVMServiceTestBase { + /** + * Test version numbering. + */ + public void testVersionNumbering() + { + try + { + setupBasicTree(); + fService.getFileOutputStream("main:/a/b/c/foo").close(); + AVMNodeDescriptor desc = fService.lookup(-1, "main:/a/b/c/foo"); + assertEquals(2, desc.getVersionID()); + desc = fService.lookup(-1, "main:/a/b"); + assertEquals(2, desc.getVersionID()); + fService.createSnapshot("main", null, null); + fService.createLayeredDirectory("main:/a", "main:/", "layer"); + fService.createSnapshot("main", null, null); + fService.getFileOutputStream("main:/layer/b/c/bar").close(); + desc = fService.lookup(-1, "main:/layer/b/c/bar"); + assertEquals(2, desc.getVersionID()); + desc = fService.lookup(-1, "main:/layer/b/c"); + assertEquals(3, desc.getVersionID()); + } + catch (Exception e) + { + e.printStackTrace(); + fail(); + } + } + /** * Test relinking of nodes to history. */ diff --git a/source/java/org/alfresco/repo/avm/AVMStoreImpl.java b/source/java/org/alfresco/repo/avm/AVMStoreImpl.java index 81c33f88d9..2b6008d0fa 100644 --- a/source/java/org/alfresco/repo/avm/AVMStoreImpl.java +++ b/source/java/org/alfresco/repo/avm/AVMStoreImpl.java @@ -232,7 +232,7 @@ public class AVMStoreImpl implements AVMStore, Serializable { newDir = new PlainDirectoryNodeImpl(this); } - newDir.setVersionID(getNextVersionID()); + // newDir.setVersionID(getNextVersionID()); if (child != null) { newDir.setAncestor(child); @@ -282,7 +282,7 @@ public class AVMStoreImpl implements AVMStore, Serializable } dir.updateModTime(); dir.putChild(name, newDir); - newDir.setVersionID(getNextVersionID()); + // newDir.setVersionID(getNextVersionID()); } /** @@ -305,7 +305,7 @@ public class AVMStoreImpl implements AVMStore, Serializable throw new AVMExistsException("Child exists: " + name); } PlainFileNodeImpl file = new PlainFileNodeImpl(this); - file.setVersionID(getNextVersionID()); + // file.setVersionID(getNextVersionID()); dir.updateModTime(); dir.putChild(name, file); if (child != null) @@ -340,7 +340,7 @@ public class AVMStoreImpl implements AVMStore, Serializable throw new AVMExistsException("Child exists: " + name); } PlainFileNodeImpl file = new PlainFileNodeImpl(this); - file.setVersionID(getNextVersionID()); + // file.setVersionID(getNextVersionID()); dir.updateModTime(); dir.putChild(name, file); if (child != null) @@ -383,7 +383,7 @@ public class AVMStoreImpl implements AVMStore, Serializable } dir.updateModTime(); dir.putChild(name, newFile); - newFile.setVersionID(getNextVersionID()); + // newFile.setVersionID(getNextVersionID()); } /** diff --git a/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java b/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java index b720cf1f33..0a6a6c2977 100644 --- a/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java @@ -81,6 +81,14 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec fIndirection = indirection; fPrimaryIndirection = true; fOpacity = false; + if (toCopy != null) + { + setVersionID(toCopy.getVersionID() + 1); + } + else + { + setVersionID(1); + } AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.flush(); if (toCopy != null) @@ -113,6 +121,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec child.getChild()); AVMDAOs.Instance().fChildEntryDAO.save(newChild); } + setVersionID(other.getVersionID() + 1); AVMDAOs.Instance().fAVMNodeDAO.flush(); copyProperties(other); copyAspects(other); @@ -148,6 +157,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec AVMDAOs.Instance().fChildEntryDAO.save(newChild); } } + setVersionID(other.getVersionID() + 1); AVMDAOs.Instance().fAVMNodeDAO.flush(); copyProperties(other); copyAspects(other); @@ -172,6 +182,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec fPrimaryIndirection = true; fLayerID = -1; fOpacity = false; + setVersionID(dir.getVersionID() + 1); AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.flush(); copyProperties(dir); diff --git a/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java b/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java index 937c09a2b8..b6e4d9f6a9 100644 --- a/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java @@ -51,6 +51,7 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode { super(store.getAVMRepository().issueID(), store); fIndirection = other.getIndirection(); + setVersionID(other.getVersionID() + 1); AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.flush(); copyProperties(other); @@ -67,6 +68,7 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode { super(store.getAVMRepository().issueID(), store); fIndirection = indirection; + setVersionID(1); AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.flush(); } @@ -95,7 +97,8 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode getContentData(lPath), indirect.getProperties(), AVMDAOs.Instance().fAVMAspectNameDAO.get(indirect), - indirect.getAcl()); + indirect.getAcl(), + getVersionID()); newMe.setAncestor(this); return newMe; } diff --git a/source/java/org/alfresco/repo/avm/Lookup.java b/source/java/org/alfresco/repo/avm/Lookup.java index 63a639712b..db503c0843 100644 --- a/source/java/org/alfresco/repo/avm/Lookup.java +++ b/source/java/org/alfresco/repo/avm/Lookup.java @@ -280,7 +280,7 @@ class Lookup if (fNeedsCopying) { node = node.copy(this); - node.setVersionID(fAVMStore.getNextVersionID()); + // node.setVersionID(fAVMStore.getNextVersionID()); fComponents.get(fPosition).setNode(node); if (fPosition == 0) { diff --git a/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java index 4422a68b59..9301e02da1 100644 --- a/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java @@ -44,6 +44,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory public PlainDirectoryNodeImpl(AVMStore store) { super(store.getAVMRepository().issueID(), store); + setVersionID(1); AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.flush(); } @@ -73,6 +74,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory child.getChild()); AVMDAOs.Instance().fChildEntryDAO.save(newChild); } + setVersionID(other.getVersionID() + 1); AVMDAOs.Instance().fAVMNodeDAO.flush(); copyProperties(other); copyAspects(other); diff --git a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java index fa945d98b1..bfa22701f5 100644 --- a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java @@ -73,7 +73,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode public PlainFileNodeImpl(AVMStore store) { super(store.getAVMRepository().issueID(), store); - // AVMContext.fgInstance.fAVMNodeDAO.flush(); + setVersionID(1); AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.flush(); } @@ -90,6 +90,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode // The null is OK because the Lookup argument is only use by // layered files. setContentData(other.getContentData(null)); + setVersionID(other.getVersionID() + 1); AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.flush(); copyProperties(other); @@ -97,6 +98,8 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode copyACLs(other); } + // TODO Is there a reason for passing all these parameters instead + // of just the LayeredFileNode? /** * Construct a new one. This is called when a LayeredFileNode * is copied. @@ -109,11 +112,13 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode ContentData content, Map props, List aspects, - DbAccessControlList acl) + DbAccessControlList acl, + int versionID) { super(store.getAVMRepository().issueID(), store); setContentData(content); setBasicAttributes(attrs); + setVersionID(versionID + 1); AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.flush(); setProperties(props);