CLOUD-2214: Mime type is removed during uploading file via WebDav

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@58846 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Matt Ward
2013-12-11 10:16:54 +00:00
parent 1e5cae38ab
commit b832c812e3
5 changed files with 54 additions and 4 deletions

View File

@@ -43,6 +43,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentStreamListener; import org.alfresco.service.cmr.repository.ContentStreamListener;
import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.repository.MimetypeService;
import org.alfresco.service.cmr.repository.MimetypeServiceAware;
import org.alfresco.util.TempFileProvider; import org.alfresco.util.TempFileProvider;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@@ -58,7 +59,7 @@ import org.springframework.aop.framework.ProxyFactory;
* *
* @author Derek Hulley * @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); private static final Log logger = LogFactory.getLog(AbstractContentWriter.class);

View File

@@ -57,6 +57,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService; 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.NoTransformerException;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; 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 // 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 // give back to the client

View File

@@ -30,6 +30,8 @@ import org.alfresco.service.cmr.repository.ContentIOException;
import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentStreamListener; import org.alfresco.service.cmr.repository.ContentStreamListener;
import org.alfresco.service.cmr.repository.ContentWriter; 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 * Wrapper for cache writer that is aware of backing store
@@ -41,7 +43,7 @@ import org.alfresco.service.cmr.repository.ContentWriter;
* @author Viachaslau Tsikhanovich * @author Viachaslau Tsikhanovich
* *
*/ */
public class BackingStoreAwareCacheWriter implements ContentWriter public class BackingStoreAwareCacheWriter implements ContentWriter, MimetypeServiceAware
{ {
/** Cache writer **/ /** Cache writer **/
private ContentWriter cacheWriter; private ContentWriter cacheWriter;
@@ -195,4 +197,9 @@ public class BackingStoreAwareCacheWriter implements ContentWriter
this.cacheWriter.guessEncoding(); this.cacheWriter.guessEncoding();
} }
@Override
public void setMimetypeService(MimetypeService mimetypeService)
{
((MimetypeServiceAware) cacheWriter).setMimetypeService(mimetypeService);
}
} }

View File

@@ -20,11 +20,22 @@ package org.alfresco.repo.content.caching;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; 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.ContentContext;
import org.alfresco.repo.content.filestore.FileContentStore; 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.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter; 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.alfresco.util.ApplicationContextHelper;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
@@ -108,6 +119,33 @@ public class FullTest
assertEquals("Reader should get correct content", content, reader.getContentString()); 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() private String makeContent()
{ {

View File

@@ -25,4 +25,7 @@
<property name="cache" ref="contentCache"/> <property name="cache" ref="contentCache"/>
<property name="cacheOnInbound" value="true"/> <property name="cacheOnInbound" value="true"/>
</bean> </bean>
<!-- Override the usual fileContentStore so that the CachingContentStore is used in its place -->
<alias name="cachingContentStore" alias="fileContentStore"/>
</beans> </beans>