mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Aspects on AVM nodes are copied on write. Also missing configuration change
from last checkin. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3699 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -310,6 +310,24 @@ public abstract class AVMNodeImpl implements AVMNode, Serializable
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy all aspects from another node.
|
||||
* @param other The other node.
|
||||
*/
|
||||
protected void copyAspects(AVMNode other)
|
||||
{
|
||||
List<AVMAspectName> aspects =
|
||||
AVMContext.fgInstance.fAVMAspectNameDAO.get(other);
|
||||
for (AVMAspectName name : aspects)
|
||||
{
|
||||
AVMAspectName newName =
|
||||
new AVMAspectNameImpl();
|
||||
newName.setName(name.getName());
|
||||
newName.setNode(this);
|
||||
AVMContext.fgInstance.fAVMAspectNameDAO.save(newName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a property on a node. Overwrite it if it exists.
|
||||
* @param name The name of the property.
|
||||
|
@@ -2220,7 +2220,9 @@ public class AVMServiceTest extends AVMServiceTestBase
|
||||
assertFalse(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_AUTHOR));
|
||||
fService.removeAspect("main:/a/b/c/foo", ContentModel.ASPECT_TITLED);
|
||||
fService.createSnapshot("main");
|
||||
fService.getFileOutputStream("main:/a/b/c/foo").close();
|
||||
assertFalse(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_TITLED));
|
||||
assertTrue(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_AUDITABLE));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@@ -114,6 +114,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
}
|
||||
AVMContext.fgInstance.fAVMNodeDAO.flush();
|
||||
copyProperties(other);
|
||||
copyAspects(other);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -147,6 +148,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
}
|
||||
AVMContext.fgInstance.fAVMNodeDAO.flush();
|
||||
copyProperties(other);
|
||||
copyAspects(other);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -170,6 +172,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
||||
AVMContext.fgInstance.fAVMNodeDAO.save(this);
|
||||
AVMContext.fgInstance.fAVMNodeDAO.flush();
|
||||
copyProperties(dir);
|
||||
copyAspects(dir);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -54,6 +54,7 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode
|
||||
AVMContext.fgInstance.fAVMNodeDAO.save(this);
|
||||
AVMContext.fgInstance.fAVMNodeDAO.flush();
|
||||
copyProperties(other);
|
||||
copyAspects(other);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -83,10 +84,12 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode
|
||||
{
|
||||
throw new AVMException("Unbacked layered file node.");
|
||||
}
|
||||
// TODO This doesn't look quite right.
|
||||
PlainFileNodeImpl newMe = new PlainFileNodeImpl(lPath.getAVMStore(),
|
||||
getBasicAttributes(),
|
||||
getContentData(lPath),
|
||||
getProperties());
|
||||
indirect.getProperties(),
|
||||
AVMContext.fgInstance.fAVMAspectNameDAO.get(indirect));
|
||||
newMe.setAncestor(this);
|
||||
return newMe;
|
||||
}
|
||||
|
@@ -73,6 +73,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory
|
||||
}
|
||||
AVMContext.fgInstance.fAVMNodeDAO.flush();
|
||||
copyProperties(other);
|
||||
copyAspects(other);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -17,6 +17,7 @@
|
||||
|
||||
package org.alfresco.repo.avm;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.alfresco.repo.domain.PropertyValue;
|
||||
@@ -90,6 +91,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode
|
||||
AVMContext.fgInstance.fAVMNodeDAO.save(this);
|
||||
AVMContext.fgInstance.fAVMNodeDAO.flush();
|
||||
copyProperties(other);
|
||||
copyAspects(other);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -102,14 +104,23 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode
|
||||
public PlainFileNodeImpl(AVMStore store,
|
||||
BasicAttributes attrs,
|
||||
ContentData content,
|
||||
Map<QName, PropertyValue> props)
|
||||
Map<QName, PropertyValue> props,
|
||||
List<AVMAspectName> aspects)
|
||||
{
|
||||
super(store.getAVMRepository().issueID(), store);
|
||||
setContentData(content);
|
||||
setBasicAttributes(attrs);
|
||||
AVMContext.fgInstance.fAVMNodeDAO.save(this);
|
||||
AVMContext.fgInstance.fAVMNodeDAO.flush();
|
||||
this.setProperties(props);
|
||||
setProperties(props);
|
||||
for (AVMAspectName name : aspects)
|
||||
{
|
||||
AVMAspectName newName =
|
||||
new AVMAspectNameImpl();
|
||||
newName.setName(name.getName());
|
||||
newName.setNode(this);
|
||||
AVMContext.fgInstance.fAVMAspectNameDAO.save(newName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user