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
This commit is contained in:
Britt Park
2007-01-04 14:59:29 +00:00
parent fcb36d4c4c
commit 0a76193084
8 changed files with 61 additions and 11 deletions

View File

@@ -447,7 +447,7 @@ public class AVMRepository
{ {
dstNode = new PlainFileNodeImpl((PlainFileNode)srcNode, dstRepo); dstNode = new PlainFileNodeImpl((PlainFileNode)srcNode, dstRepo);
} }
dstNode.setVersionID(dstRepo.getNextVersionID()); // dstNode.setVersionID(dstRepo.getNextVersionID());
dstNode.setAncestor(srcNode); dstNode.setAncestor(srcNode);
dirNode.putChild(name, dstNode); dirNode.putChild(name, dstNode);
dirNode.updateModTime(); dirNode.updateModTime();
@@ -682,7 +682,7 @@ public class AVMRepository
} }
srcDir.removeChild(sPath, srcName); srcDir.removeChild(sPath, srcName);
srcDir.updateModTime(); srcDir.updateModTime();
dstNode.setVersionID(dstRepo.getNextVersionID()); // dstNode.setVersionID(dstRepo.getNextVersionID());
if (child != null) if (child != null)
{ {
dstNode.setAncestor(child); dstNode.setAncestor(child);

View File

@@ -71,6 +71,35 @@ import org.alfresco.util.Pair;
*/ */
public class AVMServiceTest extends AVMServiceTestBase 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. * Test relinking of nodes to history.
*/ */

View File

@@ -232,7 +232,7 @@ public class AVMStoreImpl implements AVMStore, Serializable
{ {
newDir = new PlainDirectoryNodeImpl(this); newDir = new PlainDirectoryNodeImpl(this);
} }
newDir.setVersionID(getNextVersionID()); // newDir.setVersionID(getNextVersionID());
if (child != null) if (child != null)
{ {
newDir.setAncestor(child); newDir.setAncestor(child);
@@ -282,7 +282,7 @@ public class AVMStoreImpl implements AVMStore, Serializable
} }
dir.updateModTime(); dir.updateModTime();
dir.putChild(name, newDir); 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); throw new AVMExistsException("Child exists: " + name);
} }
PlainFileNodeImpl file = new PlainFileNodeImpl(this); PlainFileNodeImpl file = new PlainFileNodeImpl(this);
file.setVersionID(getNextVersionID()); // file.setVersionID(getNextVersionID());
dir.updateModTime(); dir.updateModTime();
dir.putChild(name, file); dir.putChild(name, file);
if (child != null) if (child != null)
@@ -340,7 +340,7 @@ public class AVMStoreImpl implements AVMStore, Serializable
throw new AVMExistsException("Child exists: " + name); throw new AVMExistsException("Child exists: " + name);
} }
PlainFileNodeImpl file = new PlainFileNodeImpl(this); PlainFileNodeImpl file = new PlainFileNodeImpl(this);
file.setVersionID(getNextVersionID()); // file.setVersionID(getNextVersionID());
dir.updateModTime(); dir.updateModTime();
dir.putChild(name, file); dir.putChild(name, file);
if (child != null) if (child != null)
@@ -383,7 +383,7 @@ public class AVMStoreImpl implements AVMStore, Serializable
} }
dir.updateModTime(); dir.updateModTime();
dir.putChild(name, newFile); dir.putChild(name, newFile);
newFile.setVersionID(getNextVersionID()); // newFile.setVersionID(getNextVersionID());
} }
/** /**

View File

@@ -81,6 +81,14 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
fIndirection = indirection; fIndirection = indirection;
fPrimaryIndirection = true; fPrimaryIndirection = true;
fOpacity = false; fOpacity = false;
if (toCopy != null)
{
setVersionID(toCopy.getVersionID() + 1);
}
else
{
setVersionID(1);
}
AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
if (toCopy != null) if (toCopy != null)
@@ -113,6 +121,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
child.getChild()); child.getChild());
AVMDAOs.Instance().fChildEntryDAO.save(newChild); AVMDAOs.Instance().fChildEntryDAO.save(newChild);
} }
setVersionID(other.getVersionID() + 1);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
copyProperties(other); copyProperties(other);
copyAspects(other); copyAspects(other);
@@ -148,6 +157,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
AVMDAOs.Instance().fChildEntryDAO.save(newChild); AVMDAOs.Instance().fChildEntryDAO.save(newChild);
} }
} }
setVersionID(other.getVersionID() + 1);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
copyProperties(other); copyProperties(other);
copyAspects(other); copyAspects(other);
@@ -172,6 +182,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
fPrimaryIndirection = true; fPrimaryIndirection = true;
fLayerID = -1; fLayerID = -1;
fOpacity = false; fOpacity = false;
setVersionID(dir.getVersionID() + 1);
AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
copyProperties(dir); copyProperties(dir);

View File

@@ -51,6 +51,7 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode
{ {
super(store.getAVMRepository().issueID(), store); super(store.getAVMRepository().issueID(), store);
fIndirection = other.getIndirection(); fIndirection = other.getIndirection();
setVersionID(other.getVersionID() + 1);
AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
copyProperties(other); copyProperties(other);
@@ -67,6 +68,7 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode
{ {
super(store.getAVMRepository().issueID(), store); super(store.getAVMRepository().issueID(), store);
fIndirection = indirection; fIndirection = indirection;
setVersionID(1);
AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
} }
@@ -95,7 +97,8 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode
getContentData(lPath), getContentData(lPath),
indirect.getProperties(), indirect.getProperties(),
AVMDAOs.Instance().fAVMAspectNameDAO.get(indirect), AVMDAOs.Instance().fAVMAspectNameDAO.get(indirect),
indirect.getAcl()); indirect.getAcl(),
getVersionID());
newMe.setAncestor(this); newMe.setAncestor(this);
return newMe; return newMe;
} }

View File

@@ -280,7 +280,7 @@ class Lookup
if (fNeedsCopying) if (fNeedsCopying)
{ {
node = node.copy(this); node = node.copy(this);
node.setVersionID(fAVMStore.getNextVersionID()); // node.setVersionID(fAVMStore.getNextVersionID());
fComponents.get(fPosition).setNode(node); fComponents.get(fPosition).setNode(node);
if (fPosition == 0) if (fPosition == 0)
{ {

View File

@@ -44,6 +44,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory
public PlainDirectoryNodeImpl(AVMStore store) public PlainDirectoryNodeImpl(AVMStore store)
{ {
super(store.getAVMRepository().issueID(), store); super(store.getAVMRepository().issueID(), store);
setVersionID(1);
AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
} }
@@ -73,6 +74,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory
child.getChild()); child.getChild());
AVMDAOs.Instance().fChildEntryDAO.save(newChild); AVMDAOs.Instance().fChildEntryDAO.save(newChild);
} }
setVersionID(other.getVersionID() + 1);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
copyProperties(other); copyProperties(other);
copyAspects(other); copyAspects(other);

View File

@@ -73,7 +73,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode
public PlainFileNodeImpl(AVMStore store) public PlainFileNodeImpl(AVMStore store)
{ {
super(store.getAVMRepository().issueID(), store); super(store.getAVMRepository().issueID(), store);
// AVMContext.fgInstance.fAVMNodeDAO.flush(); setVersionID(1);
AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush(); 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 // The null is OK because the Lookup argument is only use by
// layered files. // layered files.
setContentData(other.getContentData(null)); setContentData(other.getContentData(null));
setVersionID(other.getVersionID() + 1);
AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
copyProperties(other); copyProperties(other);
@@ -97,6 +98,8 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode
copyACLs(other); 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 * Construct a new one. This is called when a LayeredFileNode
* is copied. * is copied.
@@ -109,11 +112,13 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode
ContentData content, ContentData content,
Map<QName, PropertyValue> props, Map<QName, PropertyValue> props,
List<AVMAspectName> aspects, List<AVMAspectName> aspects,
DbAccessControlList acl) DbAccessControlList acl,
int versionID)
{ {
super(store.getAVMRepository().issueID(), store); super(store.getAVMRepository().issueID(), store);
setContentData(content); setContentData(content);
setBasicAttributes(attrs); setBasicAttributes(attrs);
setVersionID(versionID + 1);
AVMDAOs.Instance().fAVMNodeDAO.save(this); AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush(); AVMDAOs.Instance().fAVMNodeDAO.flush();
setProperties(props); setProperties(props);