mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Fix AR-1464: Locale is carried into and out of the Content stack.
ApplicationContextHelper now gives out a singleton ApplicationContext and includes a 'closeApplicationContext' method. Pulled all "org.alfresco.repo.content/**Test" classes into a single test suite. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5722 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -33,15 +33,15 @@ import java.nio.channels.FileLock;
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
import java.nio.channels.WritableByteChannel;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.alfresco.error.StackTraceUtil;
|
||||
import org.alfresco.i18n.I18NUtil;
|
||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||
import org.alfresco.repo.transaction.TransactionUtil;
|
||||
import org.alfresco.service.cmr.repository.ContentAccessor;
|
||||
import org.alfresco.service.cmr.repository.ContentData;
|
||||
import org.alfresco.service.cmr.repository.ContentIOException;
|
||||
import org.alfresco.service.cmr.repository.ContentStreamListener;
|
||||
import org.alfresco.service.transaction.TransactionService;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.aop.AfterReturningAdvice;
|
||||
@@ -66,12 +66,12 @@ public abstract class AbstractContentAccessor implements ContentAccessor
|
||||
private StackTraceElement[] traceLoggerChannelAssignTrace;
|
||||
|
||||
/** when set, ensures that listeners are executed within a transaction */
|
||||
// private TransactionService transactionService;
|
||||
private RetryingTransactionHelper transactionHelper;
|
||||
|
||||
private String contentUrl;
|
||||
private String mimetype;
|
||||
private String encoding;
|
||||
private Locale locale;
|
||||
|
||||
/**
|
||||
* @param contentUrl the content URL
|
||||
@@ -86,6 +86,8 @@ public abstract class AbstractContentAccessor implements ContentAccessor
|
||||
|
||||
// the default encoding is Java's default encoding
|
||||
encoding = "UTF-8";
|
||||
// the default locale
|
||||
locale = I18NUtil.getLocale();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -115,36 +117,17 @@ public abstract class AbstractContentAccessor implements ContentAccessor
|
||||
.append(", mimetype=").append(getMimetype())
|
||||
.append(", size=").append(getSize())
|
||||
.append(", encoding=").append(getEncoding())
|
||||
.append(", locale=").append(getLocale())
|
||||
.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public ContentData getContentData()
|
||||
{
|
||||
ContentData property = new ContentData(contentUrl, mimetype, getSize(), encoding);
|
||||
ContentData property = new ContentData(contentUrl, mimetype, getSize(), encoding, locale);
|
||||
return property;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides access to transactions for implementing classes
|
||||
*
|
||||
* @return Returns a source of user transactions
|
||||
*/
|
||||
// protected TransactionService getTransactionService()
|
||||
// {
|
||||
// return transactionService;
|
||||
// }
|
||||
|
||||
/**
|
||||
* Set the transaction provider to be used by {@link ContentStreamListener listeners}.
|
||||
*
|
||||
* @param transactionService the transaction service to wrap callback code in
|
||||
*/
|
||||
// public void setTransactionService(TransactionService transactionService)
|
||||
// {
|
||||
// this.transactionService = transactionService;
|
||||
// }
|
||||
|
||||
public void setRetryingTransactionHelper(RetryingTransactionHelper helper)
|
||||
{
|
||||
this.transactionHelper = helper;
|
||||
@@ -198,7 +181,23 @@ public abstract class AbstractContentAccessor implements ContentAccessor
|
||||
{
|
||||
this.encoding = encoding;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Returns the content locale or <tt>null</tt> if unkown
|
||||
*/
|
||||
public Locale getLocale()
|
||||
{
|
||||
return locale;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param locale the content's locale, if known.
|
||||
*/
|
||||
public void setLocale(Locale locale)
|
||||
{
|
||||
this.locale = locale;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a callback instance of the {@link FileChannel FileChannel}.
|
||||
*
|
||||
@@ -264,18 +263,6 @@ public abstract class AbstractContentAccessor implements ContentAccessor
|
||||
return null;
|
||||
}
|
||||
};
|
||||
// TransactionUtil.TransactionWork<Object> work = new TransactionUtil.TransactionWork<Object>()
|
||||
// {
|
||||
// public Object doWork()
|
||||
// {
|
||||
// // call the listeners
|
||||
// for (ContentStreamListener listener : listeners)
|
||||
// {
|
||||
// listener.contentStreamClosed();
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
// };
|
||||
if (transactionHelper != null)
|
||||
{
|
||||
// Execute in transaction.
|
||||
@@ -372,18 +359,6 @@ public abstract class AbstractContentAccessor implements ContentAccessor
|
||||
return null;
|
||||
}
|
||||
};
|
||||
// TransactionUtil.TransactionWork<Object> work = new TransactionUtil.TransactionWork<Object>()
|
||||
// {
|
||||
// public Object doWork()
|
||||
// {
|
||||
// // call the listeners
|
||||
// for (ContentStreamListener listener : listeners)
|
||||
// {
|
||||
// listener.contentStreamClosed();
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
// };
|
||||
// We're now doing this inside a Retrying transaction.
|
||||
// NB
|
||||
if (transactionHelper != null)
|
||||
|
@@ -35,13 +35,13 @@ import java.nio.ByteBuffer;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.transaction.UserTransaction;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.alfresco.repo.transaction.DummyTransactionService;
|
||||
import org.alfresco.service.cmr.repository.ContentIOException;
|
||||
import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.service.cmr.repository.ContentStreamListener;
|
||||
@@ -143,12 +143,13 @@ public abstract class AbstractContentReadWriteTest extends TestCase
|
||||
readerContentUrl.startsWith(ContentStore.STORE_PROTOCOL));
|
||||
}
|
||||
|
||||
public void testMimetypeAndEncoding() throws Exception
|
||||
public void testMimetypAbdEncodingAndLocale() throws Exception
|
||||
{
|
||||
ContentWriter writer = getWriter();
|
||||
// set mimetype and encoding
|
||||
writer.setMimetype("text/plain");
|
||||
writer.setEncoding("UTF-16");
|
||||
writer.setLocale(Locale.CHINESE);
|
||||
|
||||
// create a UTF-16 string
|
||||
String content = "A little bit o' this and a little bit o' that";
|
||||
@@ -163,6 +164,7 @@ public abstract class AbstractContentReadWriteTest extends TestCase
|
||||
assertEquals("Writer -> Reader content URL mismatch", writer.getContentUrl(), reader.getContentUrl());
|
||||
assertEquals("Writer -> Reader mimetype mismatch", writer.getMimetype(), reader.getMimetype());
|
||||
assertEquals("Writer -> Reader encoding mismatch", writer.getEncoding(), reader.getEncoding());
|
||||
assertEquals("Writer -> Reader locale mismatch", writer.getLocale(), reader.getLocale());
|
||||
|
||||
// now get the string directly from the reader
|
||||
String contentCheck = reader.getContentString(); // internally it should have taken care of the encoding
|
||||
@@ -204,6 +206,7 @@ public abstract class AbstractContentReadWriteTest extends TestCase
|
||||
long before = System.currentTimeMillis();
|
||||
writer.setMimetype("text/plain");
|
||||
writer.setEncoding("UTF-8");
|
||||
writer.setLocale(Locale.CHINESE);
|
||||
writer.putContent(content);
|
||||
long after = System.currentTimeMillis();
|
||||
|
||||
@@ -212,12 +215,14 @@ public abstract class AbstractContentReadWriteTest extends TestCase
|
||||
assertEquals("URL incorrect", writer.getContentUrl(), readerFromWriter.getContentUrl());
|
||||
assertEquals("Mimetype incorrect", writer.getMimetype(), readerFromWriter.getMimetype());
|
||||
assertEquals("Encoding incorrect", writer.getEncoding(), readerFromWriter.getEncoding());
|
||||
assertEquals("Locale incorrect", writer.getLocale(), readerFromWriter.getLocale());
|
||||
|
||||
// get another reader from the reader
|
||||
ContentReader readerFromReader = readerFromWriter.getReader();
|
||||
assertEquals("URL incorrect", writer.getContentUrl(), readerFromReader.getContentUrl());
|
||||
assertEquals("Mimetype incorrect", writer.getMimetype(), readerFromReader.getMimetype());
|
||||
assertEquals("Encoding incorrect", writer.getEncoding(), readerFromReader.getEncoding());
|
||||
assertEquals("Locale incorrect", writer.getLocale(), readerFromReader.getLocale());
|
||||
|
||||
// check the content
|
||||
String contentCheck = readerFromWriter.getContentString();
|
||||
|
@@ -124,6 +124,7 @@ public abstract class AbstractContentReader extends AbstractContentAccessor impl
|
||||
// copy across common attributes
|
||||
reader.setMimetype(this.getMimetype());
|
||||
reader.setEncoding(this.getEncoding());
|
||||
reader.setLocale(this.getLocale());
|
||||
// done
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
|
@@ -139,6 +139,7 @@ public abstract class AbstractContentWriter extends AbstractContentAccessor impl
|
||||
// copy across common attributes
|
||||
reader.setMimetype(this.getMimetype());
|
||||
reader.setEncoding(this.getEncoding());
|
||||
reader.setLocale(this.getLocale());
|
||||
// done
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
|
@@ -22,13 +22,14 @@
|
||||
* the FLOSS exception, and it is also available here:
|
||||
* http://www.alfresco.com/legal/licensing"
|
||||
*/
|
||||
package org.alfresco.service.cmr.repository;
|
||||
package org.alfresco.repo.content;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.alfresco.i18n.I18NUtil;
|
||||
import org.alfresco.service.cmr.repository.ContentData;
|
||||
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
|
||||
|
||||
/**
|
91
source/java/org/alfresco/repo/content/ContentTestSuite.java
Normal file
91
source/java/org/alfresco/repo/content/ContentTestSuite.java
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2007 Alfresco Software Limited.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
* As a special exception to the terms and conditions of version 2.0 of
|
||||
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||
* FLOSS exception. You should have recieved a copy of the text describing
|
||||
* the FLOSS exception, and it is also available here:
|
||||
* http://www.alfresco.com/legal/licensing"
|
||||
*/
|
||||
package org.alfresco.repo.content;
|
||||
|
||||
import org.alfresco.repo.content.cleanup.ContentStoreCleanerTest;
|
||||
import org.alfresco.repo.content.filestore.FileContentStoreTest;
|
||||
import org.alfresco.repo.content.filestore.NoRandomAccessFileContentStoreTest;
|
||||
import org.alfresco.repo.content.metadata.HtmlMetadataExtracterTest;
|
||||
import org.alfresco.repo.content.metadata.MappingMetadataExtracterTest;
|
||||
import org.alfresco.repo.content.metadata.OfficeMetadataExtracterTest;
|
||||
import org.alfresco.repo.content.metadata.OpenDocumentMetadataExtracterTest;
|
||||
import org.alfresco.repo.content.metadata.OpenOfficeMetadataExtracterTest;
|
||||
import org.alfresco.repo.content.metadata.PdfBoxMetadataExtracterTest;
|
||||
import org.alfresco.repo.content.replication.ContentStoreReplicatorTest;
|
||||
import org.alfresco.repo.content.replication.ReplicatingContentStoreTest;
|
||||
import org.alfresco.repo.content.transform.BinaryPassThroughContentTransformerTest;
|
||||
import org.alfresco.repo.content.transform.ComplexContentTransformerTest;
|
||||
import org.alfresco.repo.content.transform.ContentTransformerRegistryTest;
|
||||
import org.alfresco.repo.content.transform.HtmlParserContentTransformerTest;
|
||||
import org.alfresco.repo.content.transform.OpenOfficeContentTransformerTest;
|
||||
import org.alfresco.repo.content.transform.PdfBoxContentTransformerTest;
|
||||
import org.alfresco.repo.content.transform.PoiHssfContentTransformerTest;
|
||||
import org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerTest;
|
||||
import org.alfresco.repo.content.transform.StringExtractingContentTransformerTest;
|
||||
import org.alfresco.repo.content.transform.TextMiningContentTransformerTest;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Suite for content-related tests.
|
||||
*
|
||||
* @author Derek Hulley
|
||||
*/
|
||||
public class ContentTestSuite extends TestSuite
|
||||
{
|
||||
public static Test suite()
|
||||
{
|
||||
TestSuite suite = new TestSuite();
|
||||
|
||||
suite.addTestSuite(ContentStoreCleanerTest.class);
|
||||
suite.addTestSuite(ContentStoreCleanerTest.class);
|
||||
suite.addTestSuite(FileContentStoreTest.class);
|
||||
suite.addTestSuite(NoRandomAccessFileContentStoreTest.class);
|
||||
suite.addTestSuite(MappingMetadataExtracterTest.class);
|
||||
suite.addTestSuite(HtmlMetadataExtracterTest.class);
|
||||
suite.addTestSuite(OfficeMetadataExtracterTest.class);
|
||||
suite.addTestSuite(OpenDocumentMetadataExtracterTest.class);
|
||||
suite.addTestSuite(OpenOfficeMetadataExtracterTest.class);
|
||||
suite.addTestSuite(PdfBoxMetadataExtracterTest.class);
|
||||
suite.addTestSuite(ContentStoreReplicatorTest.class);
|
||||
suite.addTestSuite(ReplicatingContentStoreTest.class);
|
||||
suite.addTestSuite(BinaryPassThroughContentTransformerTest.class);
|
||||
suite.addTestSuite(ComplexContentTransformerTest.class);
|
||||
suite.addTestSuite(ContentTransformerRegistryTest.class);
|
||||
suite.addTestSuite(HtmlParserContentTransformerTest.class);
|
||||
suite.addTestSuite(OpenOfficeContentTransformerTest.class);
|
||||
suite.addTestSuite(PdfBoxContentTransformerTest.class);
|
||||
suite.addTestSuite(PoiHssfContentTransformerTest.class);
|
||||
suite.addTestSuite(RuntimeExecutableContentTransformerTest.class);
|
||||
suite.addTestSuite(StringExtractingContentTransformerTest.class);
|
||||
suite.addTestSuite(TextMiningContentTransformerTest.class);
|
||||
suite.addTestSuite(ContentDataTest.class);
|
||||
suite.addTestSuite(MimetypeMapTest.class);
|
||||
suite.addTestSuite(RoutingContentServiceTest.class);
|
||||
|
||||
return suite;
|
||||
}
|
||||
}
|
@@ -26,26 +26,35 @@ package org.alfresco.repo.content;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.alfresco.util.BaseSpringTest;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.repository.MimetypeService;
|
||||
import org.alfresco.util.ApplicationContextHelper;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
/**
|
||||
* @see org.alfresco.repo.content.MimetypeMap
|
||||
*
|
||||
* @author Derek Hulley
|
||||
*/
|
||||
public class MimetypeMapTest extends BaseSpringTest
|
||||
public class MimetypeMapTest extends TestCase
|
||||
{
|
||||
private MimetypeMap mimetypeMap;
|
||||
|
||||
public void setMimetypeMap(MimetypeMap mimetypeMap)
|
||||
private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
||||
|
||||
private MimetypeService mimetypeService;
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
this.mimetypeMap = mimetypeMap;
|
||||
ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||
mimetypeService = serviceRegistry.getMimetypeService();
|
||||
}
|
||||
|
||||
public void testExtensions() throws Exception
|
||||
{
|
||||
Map<String, String> extensionsByMimetype = mimetypeMap.getExtensionsByMimetype();
|
||||
Map<String, String> mimetypesByExtension = mimetypeMap.getMimetypesByExtension();
|
||||
Map<String, String> extensionsByMimetype = mimetypeService.getExtensionsByMimetype();
|
||||
Map<String, String> mimetypesByExtension = mimetypeService.getMimetypesByExtension();
|
||||
|
||||
// plain text
|
||||
assertEquals("txt", extensionsByMimetype.get("text/plain"));
|
||||
|
@@ -319,6 +319,7 @@ public class RoutingContentService implements ContentService
|
||||
// set extra data on the reader
|
||||
reader.setMimetype(contentData.getMimetype());
|
||||
reader.setEncoding(contentData.getEncoding());
|
||||
reader.setLocale(contentData.getLocale());
|
||||
|
||||
// Fire the content read policy
|
||||
if (reader != null && fireContentReadPolicy == true)
|
||||
@@ -372,6 +373,7 @@ public class RoutingContentService implements ContentService
|
||||
ContentData contentData = (ContentData)contentValue;
|
||||
writer.setMimetype(contentData.getMimetype());
|
||||
writer.setEncoding(contentData.getEncoding());
|
||||
writer.setLocale(contentData.getLocale());
|
||||
}
|
||||
|
||||
// attach a listener if required
|
||||
|
@@ -27,6 +27,7 @@ package org.alfresco.repo.content;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.transaction.RollbackException;
|
||||
import javax.transaction.UserTransaction;
|
||||
@@ -107,7 +108,7 @@ public class RoutingContentServiceTest extends TestCase
|
||||
}
|
||||
rootNodeRef = nodeService.getRootNode(storeRef);
|
||||
// create a content node
|
||||
ContentData contentData = new ContentData(null, "text/plain", 0L, "UTF-16");
|
||||
ContentData contentData = new ContentData(null, "text/plain", 0L, "UTF-16", Locale.CHINESE);
|
||||
|
||||
PropertyMap properties = new PropertyMap();
|
||||
properties.put(ContentModel.PROP_CONTENT, contentData);
|
||||
@@ -173,7 +174,8 @@ public class RoutingContentServiceTest extends TestCase
|
||||
// write some content
|
||||
writer.putContent(SOME_CONTENT);
|
||||
writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN);
|
||||
writer.setEncoding("UTF8");
|
||||
writer.setEncoding("UTF-16");
|
||||
writer.setLocale(Locale.CHINESE);
|
||||
|
||||
// set the content property manually
|
||||
nodeService.setProperty(contentNodeRef, ContentModel.PROP_CONTENT, writer.getContentData());
|
||||
@@ -182,6 +184,8 @@ public class RoutingContentServiceTest extends TestCase
|
||||
ContentReader reader = contentService.getReader(contentNodeRef, ContentModel.PROP_CONTENT);
|
||||
assertNotNull("Reader should not be null", reader);
|
||||
assertNotNull("Content URL should not be null", reader.getContentUrl());
|
||||
assertEquals("Content Encoding was not set", "UTF-16", reader.getEncoding());
|
||||
assertEquals("Content Locale was not set", Locale.CHINESE, reader.getLocale());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -196,6 +200,7 @@ public class RoutingContentServiceTest extends TestCase
|
||||
assertNotNull("Content URL should not be null", writer.getContentUrl());
|
||||
assertNotNull("Content mimetype should not be null", writer.getMimetype());
|
||||
assertNotNull("Content encoding should not be null", writer.getEncoding());
|
||||
assertNotNull("Content locale should not be null", writer.getLocale());
|
||||
|
||||
// write some content
|
||||
writer.putContent(SOME_CONTENT);
|
||||
@@ -206,6 +211,7 @@ public class RoutingContentServiceTest extends TestCase
|
||||
assertNotNull("Content URL should not be null", reader.getContentUrl());
|
||||
assertNotNull("Content mimetype should not be null", reader.getMimetype());
|
||||
assertNotNull("Content encoding should not be null", reader.getEncoding());
|
||||
assertNotNull("Content locale should not be null", reader.getLocale());
|
||||
|
||||
// check that the content length is correct
|
||||
// - note encoding is important as we get the byte length
|
||||
@@ -223,8 +229,9 @@ public class RoutingContentServiceTest extends TestCase
|
||||
// previously, the node was populated with the mimetype, etc
|
||||
// check that the write has these
|
||||
ContentWriter writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true);
|
||||
assertNotNull(writer.getMimetype());
|
||||
assertNotNull(writer.getEncoding());
|
||||
assertEquals(MimetypeMap.MIMETYPE_TEXT_PLAIN, writer.getMimetype());
|
||||
assertEquals("UTF-16", writer.getEncoding());
|
||||
assertEquals(Locale.CHINESE, writer.getLocale());
|
||||
|
||||
// now remove the content property from the node
|
||||
nodeService.setProperty(contentNodeRef, ContentModel.PROP_CONTENT, null);
|
||||
@@ -232,10 +239,12 @@ public class RoutingContentServiceTest extends TestCase
|
||||
writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true);
|
||||
assertNull(writer.getMimetype());
|
||||
assertEquals("UTF-8", writer.getEncoding());
|
||||
assertEquals(Locale.getDefault(), writer.getLocale());
|
||||
|
||||
// now set it on the writer
|
||||
writer.setMimetype("text/plain");
|
||||
writer.setEncoding("UTF-8");
|
||||
writer.setEncoding("UTF-16");
|
||||
writer.setLocale(Locale.FRENCH);
|
||||
|
||||
String content = "The quick brown fox ...";
|
||||
writer.putContent(content);
|
||||
|
@@ -46,7 +46,7 @@ import org.alfresco.service.namespace.QName;
|
||||
*
|
||||
* @author Derek Hulley
|
||||
*/
|
||||
public class AbstractMappingMetadataExtracterTest extends TestCase
|
||||
public class MappingMetadataExtracterTest extends TestCase
|
||||
{
|
||||
private DummyMappingMetadataExtracter extracter;
|
||||
private ContentReader reader;
|
@@ -32,13 +32,20 @@ import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.content.filestore.FileContentReader;
|
||||
import org.alfresco.repo.content.filestore.FileContentWriter;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||
import org.alfresco.util.BaseSpringTest;
|
||||
import org.alfresco.service.cmr.repository.MimetypeService;
|
||||
import org.alfresco.util.ApplicationContextHelper;
|
||||
import org.alfresco.util.TempFileProvider;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
/**
|
||||
* Provides a base set of tests for testing
|
||||
@@ -47,19 +54,19 @@ import org.alfresco.util.TempFileProvider;
|
||||
*
|
||||
* @author Derek Hulley
|
||||
*/
|
||||
public abstract class AbstractContentTransformerTest extends BaseSpringTest
|
||||
public abstract class AbstractContentTransformerTest extends TestCase
|
||||
{
|
||||
private static String QUICK_CONTENT = "The quick brown fox jumps over the lazy dog";
|
||||
private static String[] QUICK_WORDS = new String[] {
|
||||
"quick", "brown", "fox", "jumps", "lazy", "dog"};
|
||||
|
||||
protected MimetypeMap mimetypeMap;
|
||||
|
||||
public final void setMimetypeMap(MimetypeMap mimetypeMap)
|
||||
{
|
||||
this.mimetypeMap = mimetypeMap;
|
||||
}
|
||||
|
||||
private static Log logger = LogFactory.getLog(AbstractContentTransformerTest.class);
|
||||
|
||||
protected static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
||||
|
||||
protected ServiceRegistry serviceRegistry;
|
||||
protected MimetypeService mimetypeService;
|
||||
|
||||
/**
|
||||
* Fetches a transformer to test for a given transformation. The transformer
|
||||
* does not <b>have</b> to be reliable for the given format - if it isn't
|
||||
@@ -77,8 +84,10 @@ public abstract class AbstractContentTransformerTest extends BaseSpringTest
|
||||
* Ensures that the temp locations are cleaned out before the tests start
|
||||
*/
|
||||
@Override
|
||||
protected void onSetUpInTransaction() throws Exception
|
||||
protected void setUp() throws Exception
|
||||
{
|
||||
serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||
mimetypeService = serviceRegistry.getMimetypeService();
|
||||
// perform a little cleaning up
|
||||
long now = System.currentTimeMillis();
|
||||
TempFileProvider.TempFileCleanerJob.removeFiles(now);
|
||||
@@ -89,7 +98,7 @@ public abstract class AbstractContentTransformerTest extends BaseSpringTest
|
||||
*/
|
||||
public void testSetUp() throws Exception
|
||||
{
|
||||
assertNotNull("MimetypeMap not present", mimetypeMap);
|
||||
assertNotNull("MimetypeMap not present", mimetypeService);
|
||||
// check that the quick resources are available
|
||||
File sourceFile = AbstractContentTransformerTest.loadQuickTestFile("txt");
|
||||
assertNotNull(sourceFile);
|
||||
@@ -144,11 +153,11 @@ public abstract class AbstractContentTransformerTest extends BaseSpringTest
|
||||
.append("\n");
|
||||
|
||||
// get all mimetypes
|
||||
Set<String> mimetypes = new TreeSet<String>(mimetypeMap.getMimetypes());
|
||||
Set<String> mimetypes = new TreeSet<String>(mimetypeService.getMimetypes());
|
||||
for (String sourceMimetype : mimetypes)
|
||||
{
|
||||
// attempt to get a source file for each mimetype
|
||||
String sourceExtension = mimetypeMap.getExtension(sourceMimetype);
|
||||
String sourceExtension = mimetypeService.getExtension(sourceMimetype);
|
||||
|
||||
sb.append(" Source Extension: ").append(sourceExtension).append("\n");
|
||||
|
||||
@@ -157,7 +166,7 @@ public abstract class AbstractContentTransformerTest extends BaseSpringTest
|
||||
{
|
||||
ContentWriter targetWriter = null;
|
||||
// construct a reader onto the source file
|
||||
String targetExtension = mimetypeMap.getExtension(targetMimetype);
|
||||
String targetExtension = mimetypeService.getExtension(targetMimetype);
|
||||
|
||||
// must we test the transformation?
|
||||
ContentTransformer transformer = getTransformer(sourceMimetype, targetMimetype);
|
||||
|
@@ -25,8 +25,6 @@
|
||||
package org.alfresco.repo.content.transform;
|
||||
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* @see org.alfresco.repo.content.transform.BinaryPassThroughContentTransformer
|
||||
@@ -35,12 +33,13 @@ import org.apache.commons.logging.LogFactory;
|
||||
*/
|
||||
public class BinaryPassThroughContentTransformerTest extends AbstractContentTransformerTest
|
||||
{
|
||||
private static final Log logger = LogFactory.getLog(BinaryPassThroughContentTransformerTest.class);
|
||||
|
||||
private ContentTransformer transformer;
|
||||
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
transformer = new BinaryPassThroughContentTransformer();
|
||||
}
|
||||
|
||||
|
@@ -42,10 +42,13 @@ public class ComplexContentTransformerTest extends AbstractContentTransformerTes
|
||||
private ComplexContentTransformer transformer;
|
||||
private boolean isAvailable;
|
||||
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
ContentTransformer unoTransformer = (ContentTransformer) applicationContext.getBean("transformer.OpenOffice");
|
||||
ContentTransformer pdfBoxTransformer = (ContentTransformer) applicationContext.getBean("transformer.PdfBox");
|
||||
super.setUp();
|
||||
|
||||
ContentTransformer unoTransformer = (ContentTransformer) ctx.getBean("transformer.OpenOffice");
|
||||
ContentTransformer pdfBoxTransformer = (ContentTransformer) ctx.getBean("transformer.PdfBox");
|
||||
// make sure that they are working for this test
|
||||
if (unoTransformer.getReliability(MimetypeMap.MIMETYPE_PPT, MimetypeMap.MIMETYPE_PDF) == 0.0)
|
||||
{
|
||||
@@ -63,7 +66,7 @@ public class ComplexContentTransformerTest extends AbstractContentTransformerTes
|
||||
}
|
||||
|
||||
transformer = new ComplexContentTransformer();
|
||||
transformer.setMimetypeService(mimetypeMap);
|
||||
transformer.setMimetypeService(mimetypeService);
|
||||
// set the transformer list
|
||||
List<ContentTransformer> transformers = new ArrayList<ContentTransformer>(2);
|
||||
transformers.add(unoTransformer);
|
||||
|
@@ -55,17 +55,13 @@ public class ContentTransformerRegistryTest extends AbstractContentTransformerTe
|
||||
private ContentReader reader;
|
||||
private ContentWriter writer;
|
||||
|
||||
/**
|
||||
* Allows dependency injection
|
||||
*/
|
||||
public void setContentTransformerRegistry(ContentTransformerRegistry registry)
|
||||
{
|
||||
this.registry = registry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
registry = (ContentTransformerRegistry) ctx.getBean("contentTransformerRegistry");
|
||||
|
||||
reader = new FileContentReader(TempFileProvider.createTempFile(getName(), ".txt"));
|
||||
reader.setMimetype(A);
|
||||
writer = new FileContentWriter(TempFileProvider.createTempFile(getName(), ".txt"));
|
||||
@@ -79,17 +75,17 @@ public class ContentTransformerRegistryTest extends AbstractContentTransformerTe
|
||||
// create the dummyRegistry
|
||||
dummyRegistry = new ContentTransformerRegistry();
|
||||
// create some dummy transformers for reliability tests
|
||||
new DummyTransformer(mimetypeMap, dummyRegistry, A, B, 0.3, 10L);
|
||||
new DummyTransformer(mimetypeMap, dummyRegistry, A, B, 0.6, 10L);
|
||||
new DummyTransformer(mimetypeMap, dummyRegistry, A, C, 0.5, 10L);
|
||||
new DummyTransformer(mimetypeMap, dummyRegistry, A, C, 1.0, 10L);
|
||||
new DummyTransformer(mimetypeMap, dummyRegistry, B, C, 0.2, 10L);
|
||||
new DummyTransformer(mimetypeService, dummyRegistry, A, B, 0.3, 10L);
|
||||
new DummyTransformer(mimetypeService, dummyRegistry, A, B, 0.6, 10L);
|
||||
new DummyTransformer(mimetypeService, dummyRegistry, A, C, 0.5, 10L);
|
||||
new DummyTransformer(mimetypeService, dummyRegistry, A, C, 1.0, 10L);
|
||||
new DummyTransformer(mimetypeService, dummyRegistry, B, C, 0.2, 10L);
|
||||
// create some dummy transformers for speed tests
|
||||
new DummyTransformer(mimetypeMap, dummyRegistry, A, D, 1.0, 20L);
|
||||
new DummyTransformer(mimetypeMap, dummyRegistry, A, D, 1.0, 20L);
|
||||
new DummyTransformer(mimetypeMap, dummyRegistry, A, D, 1.0, 10L); // the fast one
|
||||
new DummyTransformer(mimetypeMap, dummyRegistry, A, D, 1.0, 20L);
|
||||
new DummyTransformer(mimetypeMap, dummyRegistry, A, D, 1.0, 20L);
|
||||
new DummyTransformer(mimetypeService, dummyRegistry, A, D, 1.0, 20L);
|
||||
new DummyTransformer(mimetypeService, dummyRegistry, A, D, 1.0, 20L);
|
||||
new DummyTransformer(mimetypeService, dummyRegistry, A, D, 1.0, 10L); // the fast one
|
||||
new DummyTransformer(mimetypeService, dummyRegistry, A, D, 1.0, 20L);
|
||||
new DummyTransformer(mimetypeService, dummyRegistry, A, D, 1.0, 20L);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -167,7 +163,7 @@ public class ContentTransformerRegistryTest extends AbstractContentTransformerTe
|
||||
public void testExplicitTransformation()
|
||||
{
|
||||
AbstractContentTransformer dummyTransformer = new DummyTransformer(
|
||||
mimetypeMap,
|
||||
mimetypeService,
|
||||
dummyRegistry,
|
||||
MimetypeMap.MIMETYPE_FLASH, MimetypeMap.MIMETYPE_EXCEL,
|
||||
1.0, 12345);
|
||||
|
@@ -36,8 +36,9 @@ public class HtmlParserContentTransformerTest extends AbstractContentTransformer
|
||||
private ContentTransformer transformer;
|
||||
|
||||
@Override
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
transformer = new HtmlParserContentTransformer();
|
||||
}
|
||||
|
||||
|
@@ -46,12 +46,15 @@ public class OpenOfficeContentTransformerTest extends AbstractContentTransformer
|
||||
|
||||
private OpenOfficeContentTransformer transformer;
|
||||
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
OpenOfficeConnection connection = (OpenOfficeConnection) applicationContext.getBean("openOfficeConnection");
|
||||
super.setUp();
|
||||
|
||||
OpenOfficeConnection connection = (OpenOfficeConnection) ctx.getBean("openOfficeConnection");
|
||||
|
||||
transformer = new OpenOfficeContentTransformer();
|
||||
transformer.setMimetypeService(mimetypeMap);
|
||||
transformer.setMimetypeService(mimetypeService);
|
||||
transformer.setConnection(connection);
|
||||
transformer.setDocumentFormatsConfiguration("classpath:alfresco/mimetype/openoffice-document-formats.xml");
|
||||
transformer.register();
|
||||
@@ -68,7 +71,7 @@ public class OpenOfficeContentTransformerTest extends AbstractContentTransformer
|
||||
public void testSetUp() throws Exception
|
||||
{
|
||||
super.testSetUp();
|
||||
assertNotNull(mimetypeMap);
|
||||
assertNotNull(mimetypeService);
|
||||
}
|
||||
|
||||
public void testReliability() throws Exception
|
||||
|
@@ -25,8 +25,6 @@
|
||||
package org.alfresco.repo.content.transform;
|
||||
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* @see org.alfresco.repo.content.transform.PdfBoxContentTransformer
|
||||
@@ -35,12 +33,13 @@ import org.apache.commons.logging.LogFactory;
|
||||
*/
|
||||
public class PdfBoxContentTransformerTest extends AbstractContentTransformerTest
|
||||
{
|
||||
private static final Log logger = LogFactory.getLog(PdfBoxContentTransformerTest.class);
|
||||
|
||||
private ContentTransformer transformer;
|
||||
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
transformer = new PdfBoxContentTransformer();
|
||||
}
|
||||
|
||||
|
@@ -31,8 +31,6 @@ import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.content.filestore.FileContentWriter;
|
||||
import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.util.TempFileProvider;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* @see org.alfresco.repo.content.transform.PoiHssfContentTransformer
|
||||
@@ -41,12 +39,13 @@ import org.apache.commons.logging.LogFactory;
|
||||
*/
|
||||
public class PoiHssfContentTransformerTest extends AbstractContentTransformerTest
|
||||
{
|
||||
private static final Log logger = LogFactory.getLog(PoiHssfContentTransformerTest.class);
|
||||
|
||||
private ContentTransformer transformer;
|
||||
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
transformer = new PoiHssfContentTransformer();
|
||||
}
|
||||
|
||||
|
@@ -66,8 +66,10 @@ public class StringExtractingContentTransformerTest extends AbstractContentTrans
|
||||
private ContentWriter targetWriter;
|
||||
|
||||
@Override
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
transformer = new StringExtractingContentTransformer();
|
||||
targetWriter = new FileContentWriter(getTempFile());
|
||||
targetWriter.setMimetype("text/plain");
|
||||
|
@@ -31,8 +31,6 @@ import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.content.filestore.FileContentWriter;
|
||||
import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.util.TempFileProvider;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* @see org.alfresco.repo.content.transform.TextMiningContentTransformer
|
||||
@@ -41,12 +39,13 @@ import org.apache.commons.logging.LogFactory;
|
||||
*/
|
||||
public class TextMiningContentTransformerTest extends AbstractContentTransformerTest
|
||||
{
|
||||
private static final Log logger = LogFactory.getLog(TextMiningContentTransformerTest.class);
|
||||
|
||||
private ContentTransformer transformer;
|
||||
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
transformer = new TextMiningContentTransformer();
|
||||
}
|
||||
|
||||
|
@@ -40,14 +40,17 @@ public class ImageMagickContentTransformerTest extends AbstractContentTransforme
|
||||
{
|
||||
private ImageMagickContentTransformer transformer;
|
||||
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
RuntimeExec executer = new RuntimeExec();
|
||||
executer.setCommand("imconvert.exe ${source} ${options} ${target}");
|
||||
executer.setDefaultProperties(Collections.singletonMap("options", ""));
|
||||
|
||||
transformer = new ImageMagickContentTransformer();
|
||||
transformer.setMimetypeService(mimetypeMap);
|
||||
transformer.setMimetypeService(mimetypeService);
|
||||
transformer.setExecuter(executer);
|
||||
transformer.init();
|
||||
}
|
||||
|
@@ -27,8 +27,6 @@ package org.alfresco.repo.content.transform.magick;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.content.transform.AbstractContentTransformerTest;
|
||||
import org.alfresco.repo.content.transform.ContentTransformer;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* @see org.alfresco.repo.content.transform.magick.JMagickContentTransformer
|
||||
@@ -37,14 +35,15 @@ import org.apache.commons.logging.LogFactory;
|
||||
*/
|
||||
public class JMagickContentTransformerTest extends AbstractContentTransformerTest
|
||||
{
|
||||
private static final Log logger = LogFactory.getLog(JMagickContentTransformerTest.class);
|
||||
|
||||
private JMagickContentTransformer transformer;
|
||||
|
||||
public void onSetUpInTransaction() throws Exception
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
transformer = new JMagickContentTransformer();
|
||||
transformer.setMimetypeService(mimetypeMap);
|
||||
transformer.setMimetypeService(mimetypeService);
|
||||
transformer.init();
|
||||
}
|
||||
|
||||
|
@@ -24,6 +24,8 @@
|
||||
*/
|
||||
package org.alfresco.service.cmr.repository;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||
import org.alfresco.service.transaction.TransactionService;
|
||||
|
||||
@@ -120,4 +122,18 @@ public interface ContentAccessor
|
||||
* @param encoding a java-recognised encoding format
|
||||
*/
|
||||
public void setEncoding(String encoding);
|
||||
|
||||
/**
|
||||
* Get the locale of the content being accessed
|
||||
*
|
||||
* @return Returns a valid java Locale
|
||||
*/
|
||||
public Locale getLocale();
|
||||
|
||||
/**
|
||||
* Set the <code>Locale</code> for this accessor
|
||||
*
|
||||
* @param locale a java-recognised locale
|
||||
*/
|
||||
public void setLocale(Locale locale);
|
||||
}
|
||||
|
@@ -35,17 +35,40 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
*/
|
||||
public class ApplicationContextHelper
|
||||
{
|
||||
private static ClassPathXmlApplicationContext instance;
|
||||
|
||||
/** location of required configuration files */
|
||||
public static final String[] CONFIG_LOCATIONS = new String[] { "classpath:alfresco/application-context.xml" };
|
||||
|
||||
/**
|
||||
* Instantiates a new application context.
|
||||
* Provides a static, single instance of the application context. This method can be
|
||||
* called repeatedly.
|
||||
*
|
||||
* @return Returns a new application context
|
||||
*/
|
||||
public static ApplicationContext getApplicationContext()
|
||||
public synchronized static ApplicationContext getApplicationContext()
|
||||
{
|
||||
return new ClassPathXmlApplicationContext(CONFIG_LOCATIONS);
|
||||
if (instance != null)
|
||||
{
|
||||
return instance;
|
||||
}
|
||||
instance = new ClassPathXmlApplicationContext(CONFIG_LOCATIONS);
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes and releases the application context. On the next call to
|
||||
* {@link #getApplicationContext()}, a new context will be given.
|
||||
*/
|
||||
public synchronized void closeApplicationContext()
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
// Nothing to do
|
||||
return;
|
||||
}
|
||||
instance.close();
|
||||
instance = null;
|
||||
}
|
||||
|
||||
public static void main(String ... args)
|
||||
|
Reference in New Issue
Block a user