diff --git a/source/java/org/alfresco/repo/avm/AVMCrawler.java b/source/java/org/alfresco/repo/avm/AVMCrawler.java index b91c4c6ee7..e2e92b0655 100644 --- a/source/java/org/alfresco/repo/avm/AVMCrawler.java +++ b/source/java/org/alfresco/repo/avm/AVMCrawler.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; import java.util.Random; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.service.cmr.avm.AVMException; import org.alfresco.service.cmr.avm.AVMNodeDescriptor; import org.alfresco.service.cmr.avm.AVMService; @@ -225,6 +226,10 @@ class AVMCrawler implements Runnable { return; } + if (e instanceof AlfrescoRuntimeException) + { + return; + } e.printStackTrace(System.err); throw new AVMException("Failure", e); } diff --git a/source/java/org/alfresco/repo/avm/AVMNodeService.java b/source/java/org/alfresco/repo/avm/AVMNodeService.java index 49cedb801b..9acb834d45 100644 --- a/source/java/org/alfresco/repo/avm/AVMNodeService.java +++ b/source/java/org/alfresco/repo/avm/AVMNodeService.java @@ -1037,18 +1037,26 @@ public class AVMNodeService extends AbstractNodeServiceImpl implements NodeServi // Invoke policy behaviors. invokeBeforeUpdateNode(nodeRef); Object [] avmVersionPath = AVMNodeConverter.ToAVMVersionPath(nodeRef); + if ((Integer)avmVersionPath[0] >= 0) + { + throw new InvalidNodeRefException("Read only store.", nodeRef); + } // TODO Just until we can set built in properties on AVM Nodes. if (isBuiltInProperty(qname)) { if (qname.equals(ContentModel.PROP_CONTENT)) { + try + { + fAVMService.setContentData((String)avmVersionPath[1], (ContentData)value); + } + catch (ClassCastException e) + { + throw new AVMException("Invalid ContentData."); + } } return; } - if ((Integer)avmVersionPath[0] >= 0) - { - throw new InvalidNodeRefException("Read only store.", nodeRef); - } try { fAVMService.setNodeProperty((String)avmVersionPath[1], qname, new PropertyValue(null, value)); diff --git a/source/java/org/alfresco/repo/avm/AVMStoreImpl.java b/source/java/org/alfresco/repo/avm/AVMStoreImpl.java index 36e01f6f0e..fb680db5de 100644 --- a/source/java/org/alfresco/repo/avm/AVMStoreImpl.java +++ b/source/java/org/alfresco/repo/avm/AVMStoreImpl.java @@ -352,8 +352,9 @@ public class AVMStoreImpl implements AVMStore, Serializable NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, fName + ":" + path); ContentWriter writer = AVMContext.fgInstance.getContentService().getWriter(nodeRef, ContentModel.PROP_CONTENT, true); - // TODO This can't perform very well. - setContentData(path, writer.getContentData()); + // TODO This can't perform very well. What this gets down to + // is that integration with ContentService is awkward. + // setContentData(path, writer.getContentData()); return writer; } diff --git a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java index 5c8af50e1c..efaa152e1b 100644 --- a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java @@ -288,6 +288,10 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode */ private long getFileLength() { + if (fContentURL == null) + { + return 0L; + } ContentReader reader = AVMContext.fgInstance.getContentStore().getReader(fContentURL); return reader.getSize(); }