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:
Derek Hulley
2007-05-18 14:26:08 +00:00
parent 7649017ac0
commit e3223d97fb
24 changed files with 288 additions and 143 deletions

View File

@@ -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)

View File

@@ -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();

View File

@@ -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())
{

View File

@@ -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())
{

View File

@@ -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;
/**

View 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;
}
}

View File

@@ -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"));

View File

@@ -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

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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();
}

View File

@@ -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");

View File

@@ -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();
}

View File

@@ -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();
}

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -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)