diff --git a/config/alfresco/hibernate-context.xml b/config/alfresco/hibernate-context.xml
index fd2b32af68..f9fd5473a8 100644
--- a/config/alfresco/hibernate-context.xml
+++ b/config/alfresco/hibernate-context.xml
@@ -213,6 +213,9 @@
+
+
+
diff --git a/source/java/org/alfresco/repo/avm/AVMNodeImpl.java b/source/java/org/alfresco/repo/avm/AVMNodeImpl.java
index be8400fdfc..de8bc9da2f 100644
--- a/source/java/org/alfresco/repo/avm/AVMNodeImpl.java
+++ b/source/java/org/alfresco/repo/avm/AVMNodeImpl.java
@@ -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 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.
diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTest.java b/source/java/org/alfresco/repo/avm/AVMServiceTest.java
index c297e9212f..ce60bb1f53 100644
--- a/source/java/org/alfresco/repo/avm/AVMServiceTest.java
+++ b/source/java/org/alfresco/repo/avm/AVMServiceTest.java
@@ -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)
{
diff --git a/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java b/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java
index cd1281033b..4de69afef6 100644
--- a/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java
+++ b/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java
@@ -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);
}
/**
diff --git a/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java b/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java
index 861131aa66..88b297278f 100644
--- a/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java
+++ b/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java
@@ -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;
}
diff --git a/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java
index c6b404173f..f034bfdcde 100644
--- a/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java
+++ b/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java
@@ -73,6 +73,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory
}
AVMContext.fgInstance.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 2302a7f000..d7545c69f4 100644
--- a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java
+++ b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java
@@ -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 props)
+ Map props,
+ List 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);
+ }
}
/**