diff --git a/source/java/org/alfresco/repo/content/AbstractContentWriter.java b/source/java/org/alfresco/repo/content/AbstractContentWriter.java index 59fa0c7596..1ac28b67d4 100644 --- a/source/java/org/alfresco/repo/content/AbstractContentWriter.java +++ b/source/java/org/alfresco/repo/content/AbstractContentWriter.java @@ -43,6 +43,7 @@ import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentStreamListener; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.MimetypeService; +import org.alfresco.service.cmr.repository.MimetypeServiceAware; import org.alfresco.util.TempFileProvider; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -58,7 +59,7 @@ import org.springframework.aop.framework.ProxyFactory; * * @author Derek Hulley */ -public abstract class AbstractContentWriter extends AbstractContentAccessor implements ContentWriter +public abstract class AbstractContentWriter extends AbstractContentAccessor implements ContentWriter, MimetypeServiceAware { private static final Log logger = LogFactory.getLog(AbstractContentWriter.class); diff --git a/source/java/org/alfresco/repo/content/ContentServiceImpl.java b/source/java/org/alfresco/repo/content/ContentServiceImpl.java index 30bf8efe16..5fb63ec3c4 100644 --- a/source/java/org/alfresco/repo/content/ContentServiceImpl.java +++ b/source/java/org/alfresco/repo/content/ContentServiceImpl.java @@ -57,6 +57,7 @@ import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.MimetypeService; +import org.alfresco.service.cmr.repository.MimetypeServiceAware; import org.alfresco.service.cmr.repository.NoTransformerException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; @@ -540,9 +541,9 @@ public class ContentServiceImpl implements ContentService, ApplicationContextAwa } // supply the writer with a copy of the mimetype service if needed - if (writer instanceof AbstractContentWriter) + if (writer instanceof MimetypeServiceAware) { - ((AbstractContentWriter)writer).setMimetypeService(mimetypeService); + ((MimetypeServiceAware)writer).setMimetypeService(mimetypeService); } // give back to the client diff --git a/source/java/org/alfresco/repo/content/caching/BackingStoreAwareCacheWriter.java b/source/java/org/alfresco/repo/content/caching/BackingStoreAwareCacheWriter.java index 153be5a745..14983d5eaa 100644 --- a/source/java/org/alfresco/repo/content/caching/BackingStoreAwareCacheWriter.java +++ b/source/java/org/alfresco/repo/content/caching/BackingStoreAwareCacheWriter.java @@ -30,6 +30,8 @@ import org.alfresco.service.cmr.repository.ContentIOException; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentStreamListener; import org.alfresco.service.cmr.repository.ContentWriter; +import org.alfresco.service.cmr.repository.MimetypeService; +import org.alfresco.service.cmr.repository.MimetypeServiceAware; /** * Wrapper for cache writer that is aware of backing store @@ -41,7 +43,7 @@ import org.alfresco.service.cmr.repository.ContentWriter; * @author Viachaslau Tsikhanovich * */ -public class BackingStoreAwareCacheWriter implements ContentWriter +public class BackingStoreAwareCacheWriter implements ContentWriter, MimetypeServiceAware { /** Cache writer **/ private ContentWriter cacheWriter; @@ -195,4 +197,9 @@ public class BackingStoreAwareCacheWriter implements ContentWriter this.cacheWriter.guessEncoding(); } + @Override + public void setMimetypeService(MimetypeService mimetypeService) + { + ((MimetypeServiceAware) cacheWriter).setMimetypeService(mimetypeService); + } } diff --git a/source/test-java/org/alfresco/repo/content/caching/FullTest.java b/source/test-java/org/alfresco/repo/content/caching/FullTest.java index b40a0d9e57..6c8f650bdf 100644 --- a/source/test-java/org/alfresco/repo/content/caching/FullTest.java +++ b/source/test-java/org/alfresco/repo/content/caching/FullTest.java @@ -20,11 +20,22 @@ package org.alfresco.repo.content.caching; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import java.util.UUID; + +import org.alfresco.model.ContentModel; import org.alfresco.repo.content.ContentContext; import org.alfresco.repo.content.filestore.FileContentStore; +import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.repository.ContentReader; +import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; import org.alfresco.util.ApplicationContextHelper; import org.junit.Before; import org.junit.BeforeClass; @@ -108,6 +119,33 @@ public class FullTest assertEquals("Reader should get correct content", content, reader.getContentString()); } + // CLOUD-2214: Mime type is removed during uploading file via WebDav + @Test + public void canGuessMimeType() + { + AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); + + ContentService contentService = (ContentService) ctx.getBean("ContentService"); + NodeService nodeService = (NodeService) ctx.getBean("NodeService"); + StoreRef storeRef = nodeService.createStore("workspace", getClass().getName()+UUID.randomUUID()); + NodeRef rootNodeRef = nodeService.getRootNode(storeRef); + NodeRef nodeRef = nodeService.createNode( + rootNodeRef, + ContentModel.ASSOC_CHILDREN, + QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, getClass().getSimpleName()), + ContentModel.TYPE_CONTENT).getChildRef(); + + ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true); + // Pre-condition of test is that we're testing with a potentially problematic BackingStoreAwareCacheWriter + // rather than a FileContentWriter, which we would expect to work. + assertTrue(writer instanceof BackingStoreAwareCacheWriter); + + String content = "This is some content"; + writer.putContent(content); + writer.guessMimetype("myfile.txt"); + + assertEquals("text/plain", writer.getMimetype()); + } private String makeContent() { diff --git a/source/test-resources/cachingstore/test-context.xml b/source/test-resources/cachingstore/test-context.xml index 017f14f380..715e316d24 100644 --- a/source/test-resources/cachingstore/test-context.xml +++ b/source/test-resources/cachingstore/test-context.xml @@ -25,4 +25,7 @@ + + +