diff --git a/source/java/org/alfresco/repo/content/AbstractContentAccessor.java b/source/java/org/alfresco/repo/content/AbstractContentAccessor.java index 803f4d39e1..f20f75d711 100644 --- a/source/java/org/alfresco/repo/content/AbstractContentAccessor.java +++ b/source/java/org/alfresco/repo/content/AbstractContentAccessor.java @@ -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 null 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 work = new TransactionUtil.TransactionWork() -// { -// 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 work = new TransactionUtil.TransactionWork() -// { -// 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) diff --git a/source/java/org/alfresco/repo/content/AbstractContentReadWriteTest.java b/source/java/org/alfresco/repo/content/AbstractContentReadWriteTest.java index a814c95637..0c19675f41 100644 --- a/source/java/org/alfresco/repo/content/AbstractContentReadWriteTest.java +++ b/source/java/org/alfresco/repo/content/AbstractContentReadWriteTest.java @@ -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(); diff --git a/source/java/org/alfresco/repo/content/AbstractContentReader.java b/source/java/org/alfresco/repo/content/AbstractContentReader.java index f9c74d4b08..175aed0de2 100644 --- a/source/java/org/alfresco/repo/content/AbstractContentReader.java +++ b/source/java/org/alfresco/repo/content/AbstractContentReader.java @@ -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()) { diff --git a/source/java/org/alfresco/repo/content/AbstractContentWriter.java b/source/java/org/alfresco/repo/content/AbstractContentWriter.java index e931bcadd3..eb0f5fb743 100644 --- a/source/java/org/alfresco/repo/content/AbstractContentWriter.java +++ b/source/java/org/alfresco/repo/content/AbstractContentWriter.java @@ -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()) { diff --git a/source/java/org/alfresco/service/cmr/repository/ContentDataTest.java b/source/java/org/alfresco/repo/content/ContentDataTest.java similarity index 96% rename from source/java/org/alfresco/service/cmr/repository/ContentDataTest.java rename to source/java/org/alfresco/repo/content/ContentDataTest.java index f734ce1808..da430700e3 100644 --- a/source/java/org/alfresco/service/cmr/repository/ContentDataTest.java +++ b/source/java/org/alfresco/repo/content/ContentDataTest.java @@ -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; /** diff --git a/source/java/org/alfresco/repo/content/ContentTestSuite.java b/source/java/org/alfresco/repo/content/ContentTestSuite.java new file mode 100644 index 0000000000..9304952579 --- /dev/null +++ b/source/java/org/alfresco/repo/content/ContentTestSuite.java @@ -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; + } +} diff --git a/source/java/org/alfresco/repo/content/MimetypeMapTest.java b/source/java/org/alfresco/repo/content/MimetypeMapTest.java index 421d6c3349..6c164bcef4 100644 --- a/source/java/org/alfresco/repo/content/MimetypeMapTest.java +++ b/source/java/org/alfresco/repo/content/MimetypeMapTest.java @@ -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 extensionsByMimetype = mimetypeMap.getExtensionsByMimetype(); - Map mimetypesByExtension = mimetypeMap.getMimetypesByExtension(); + Map extensionsByMimetype = mimetypeService.getExtensionsByMimetype(); + Map mimetypesByExtension = mimetypeService.getMimetypesByExtension(); // plain text assertEquals("txt", extensionsByMimetype.get("text/plain")); diff --git a/source/java/org/alfresco/repo/content/RoutingContentService.java b/source/java/org/alfresco/repo/content/RoutingContentService.java index 575124133c..f0156edd66 100644 --- a/source/java/org/alfresco/repo/content/RoutingContentService.java +++ b/source/java/org/alfresco/repo/content/RoutingContentService.java @@ -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 diff --git a/source/java/org/alfresco/repo/content/RoutingContentServiceTest.java b/source/java/org/alfresco/repo/content/RoutingContentServiceTest.java index d943149137..313eaa765f 100644 --- a/source/java/org/alfresco/repo/content/RoutingContentServiceTest.java +++ b/source/java/org/alfresco/repo/content/RoutingContentServiceTest.java @@ -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); diff --git a/source/java/org/alfresco/repo/content/metadata/AbstractMappingMetadataExtracterTest.java b/source/java/org/alfresco/repo/content/metadata/MappingMetadataExtracterTest.java similarity index 97% rename from source/java/org/alfresco/repo/content/metadata/AbstractMappingMetadataExtracterTest.java rename to source/java/org/alfresco/repo/content/metadata/MappingMetadataExtracterTest.java index 157c550ecf..27fa96b1e0 100644 --- a/source/java/org/alfresco/repo/content/metadata/AbstractMappingMetadataExtracterTest.java +++ b/source/java/org/alfresco/repo/content/metadata/MappingMetadataExtracterTest.java @@ -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; diff --git a/source/java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java index 9153bb97c0..0abc0c254e 100644 --- a/source/java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java @@ -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 have 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 mimetypes = new TreeSet(mimetypeMap.getMimetypes()); + Set mimetypes = new TreeSet(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); diff --git a/source/java/org/alfresco/repo/content/transform/BinaryPassThroughContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/BinaryPassThroughContentTransformerTest.java index ea1ba4ad72..ee35f91392 100644 --- a/source/java/org/alfresco/repo/content/transform/BinaryPassThroughContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/BinaryPassThroughContentTransformerTest.java @@ -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(); } diff --git a/source/java/org/alfresco/repo/content/transform/ComplexContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/ComplexContentTransformerTest.java index 0d93dea1da..09989973cc 100644 --- a/source/java/org/alfresco/repo/content/transform/ComplexContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/ComplexContentTransformerTest.java @@ -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 transformers = new ArrayList(2); transformers.add(unoTransformer); diff --git a/source/java/org/alfresco/repo/content/transform/ContentTransformerRegistryTest.java b/source/java/org/alfresco/repo/content/transform/ContentTransformerRegistryTest.java index c02ef53a87..0b9df2b016 100644 --- a/source/java/org/alfresco/repo/content/transform/ContentTransformerRegistryTest.java +++ b/source/java/org/alfresco/repo/content/transform/ContentTransformerRegistryTest.java @@ -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); diff --git a/source/java/org/alfresco/repo/content/transform/HtmlParserContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/HtmlParserContentTransformerTest.java index 36c1cff674..316bb21ffb 100644 --- a/source/java/org/alfresco/repo/content/transform/HtmlParserContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/HtmlParserContentTransformerTest.java @@ -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(); } diff --git a/source/java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java index 99adf85584..9f410b6a90 100644 --- a/source/java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java @@ -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 diff --git a/source/java/org/alfresco/repo/content/transform/PdfBoxContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/PdfBoxContentTransformerTest.java index 68327a9f50..415998e3ca 100644 --- a/source/java/org/alfresco/repo/content/transform/PdfBoxContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/PdfBoxContentTransformerTest.java @@ -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(); } diff --git a/source/java/org/alfresco/repo/content/transform/PoiHssfContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/PoiHssfContentTransformerTest.java index dcda5c135d..de356cc695 100644 --- a/source/java/org/alfresco/repo/content/transform/PoiHssfContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/PoiHssfContentTransformerTest.java @@ -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(); } diff --git a/source/java/org/alfresco/repo/content/transform/StringExtractingContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/StringExtractingContentTransformerTest.java index 406fd920a6..f1774370af 100644 --- a/source/java/org/alfresco/repo/content/transform/StringExtractingContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/StringExtractingContentTransformerTest.java @@ -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"); diff --git a/source/java/org/alfresco/repo/content/transform/TextMiningContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/TextMiningContentTransformerTest.java index 0390eb28fb..a5bdc59867 100644 --- a/source/java/org/alfresco/repo/content/transform/TextMiningContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/TextMiningContentTransformerTest.java @@ -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(); } diff --git a/source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformerTest.java index 6dd5c4b8a5..db37bf66f0 100644 --- a/source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformerTest.java @@ -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(); } diff --git a/source/java/org/alfresco/repo/content/transform/magick/JMagickContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/magick/JMagickContentTransformerTest.java index d2b86dcd84..66c628cf9b 100644 --- a/source/java/org/alfresco/repo/content/transform/magick/JMagickContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/magick/JMagickContentTransformerTest.java @@ -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(); } diff --git a/source/java/org/alfresco/service/cmr/repository/ContentAccessor.java b/source/java/org/alfresco/service/cmr/repository/ContentAccessor.java index 64cdb59202..a497e6844e 100644 --- a/source/java/org/alfresco/service/cmr/repository/ContentAccessor.java +++ b/source/java/org/alfresco/service/cmr/repository/ContentAccessor.java @@ -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 Locale for this accessor + * + * @param locale a java-recognised locale + */ + public void setLocale(Locale locale); } diff --git a/source/java/org/alfresco/util/ApplicationContextHelper.java b/source/java/org/alfresco/util/ApplicationContextHelper.java index 535c63ff89..2c2d3b35ce 100644 --- a/source/java/org/alfresco/util/ApplicationContextHelper.java +++ b/source/java/org/alfresco/util/ApplicationContextHelper.java @@ -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)