* If not set, then the
* If initialization is successful, then autoregistration takes place.
*/
- public void init()
+ public void afterPropertiesSet()
{
if (getMimetypeService() == null)
{
@@ -120,10 +123,7 @@ public abstract class AbstractImageMagickContentTransformer extends AbstractCont
" to: " + outputFile);
}
// we can be sure that it works
- setAvailable(true);
-
- // register
- super.register();
+ setAvailable(true);
}
catch (Throwable e)
{
@@ -171,8 +171,8 @@ public abstract class AbstractImageMagickContentTransformer extends AbstractCont
{
return false;
}
- if (!AbstractImageMagickContentTransformer.isSupported(sourceMimetype) ||
- !AbstractImageMagickContentTransformer.isSupported(targetMimetype))
+ if (!AbstractImageMagickContentTransformerWorker.isSupported(sourceMimetype) ||
+ !AbstractImageMagickContentTransformerWorker.isSupported(targetMimetype))
{
// only support IMAGE -> IMAGE (excl. RGB)
return false;
@@ -186,7 +186,7 @@ public abstract class AbstractImageMagickContentTransformer extends AbstractCont
/**
* @see #transformInternal(File, File)
*/
- protected final void transformInternal(
+ public final void transform(
ContentReader reader,
ContentWriter writer,
TransformationOptions options) throws Exception
@@ -196,8 +196,9 @@ public abstract class AbstractImageMagickContentTransformer extends AbstractCont
String targetMimetype = getMimetype(writer);
// get the extensions to use
- String sourceExtension = getMimetypeService().getExtension(sourceMimetype);
- String targetExtension = getMimetypeService().getExtension(targetMimetype);
+ MimetypeService mimetypeService = getMimetypeService();
+ String sourceExtension = mimetypeService.getExtension(sourceMimetype);
+ String targetExtension = mimetypeService.getExtension(targetMimetype);
if (sourceExtension == null || targetExtension == null)
{
throw new AlfrescoRuntimeException("Unknown extensions for mimetypes: \n" +
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 4017d0c646..ab508a2ec7 100644
--- a/source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformerTest.java
+++ b/source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformerTest.java
@@ -29,6 +29,7 @@ import java.util.Collections;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.content.transform.AbstractContentTransformerTest;
import org.alfresco.repo.content.transform.ContentTransformer;
+import org.alfresco.repo.content.transform.ProxyContentTransformer;
import org.alfresco.service.cmr.repository.TransformationOptions;
import org.alfresco.util.exec.RuntimeExec;
@@ -39,7 +40,8 @@ import org.alfresco.util.exec.RuntimeExec;
*/
public class ImageMagickContentTransformerTest extends AbstractContentTransformerTest
{
- private ImageMagickContentTransformer transformer;
+ private ImageMagickContentTransformerWorker worker;
+ private ContentTransformer transformer;
@Override
public void setUp() throws Exception
@@ -50,10 +52,15 @@ public class ImageMagickContentTransformerTest extends AbstractContentTransforme
executer.setCommand(new String[] {"imconvert.exe", "${source}", "${options}", "${target}"});
executer.setDefaultProperties(Collections.singletonMap("options", ""));
- transformer = new ImageMagickContentTransformer();
+ this.worker = new ImageMagickContentTransformerWorker();
+ worker.setMimetypeService(mimetypeService);
+ worker.setExecuter(executer);
+ worker.afterPropertiesSet();
+
+ ProxyContentTransformer transformer = new ProxyContentTransformer();
transformer.setMimetypeService(mimetypeService);
- transformer.setExecuter(executer);
- transformer.init();
+ this.transformer = transformer;
+
}
/**
@@ -66,7 +73,7 @@ public class ImageMagickContentTransformerTest extends AbstractContentTransforme
public void testReliability() throws Exception
{
- if (!transformer.isAvailable())
+ if (!this.worker.isAvailable())
{
return;
}
diff --git a/source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformer.java b/source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformerWorker.java
similarity index 90%
rename from source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformer.java
rename to source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformerWorker.java
index 8f815a9af4..86239d573c 100644
--- a/source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformer.java
+++ b/source/java/org/alfresco/repo/content/transform/magick/ImageMagickContentTransformerWorker.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2008 Alfresco Software Limited.
+ * Copyright (C) 2005-2009 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
@@ -41,7 +41,7 @@ import org.apache.commons.logging.LogFactory;
*
* @author Derek Hulley
*/
-public class ImageMagickContentTransformer extends AbstractImageMagickContentTransformer
+public class ImageMagickContentTransformerWorker extends AbstractImageMagickContentTransformerWorker
{
/** options variable name */
private static final String KEY_OPTIONS = "options";
@@ -50,7 +50,7 @@ public class ImageMagickContentTransformer extends AbstractImageMagickContentTra
/** target variable name */
private static final String VAR_TARGET = "target";
- private static final Log logger = LogFactory.getLog(ImageMagickContentTransformer.class);
+ private static final Log logger = LogFactory.getLog(ImageMagickContentTransformerWorker.class);
/** the system command executer */
private RuntimeExec executer;
@@ -64,7 +64,7 @@ public class ImageMagickContentTransformer extends AbstractImageMagickContentTra
/**
* Default constructor
*/
- public ImageMagickContentTransformer()
+ public ImageMagickContentTransformerWorker()
{
}
@@ -110,31 +110,28 @@ public class ImageMagickContentTransformer extends AbstractImageMagickContentTra
return this.versionString;
}
+
/**
* Checks for the JMagick and ImageMagick dependencies, using the common
* {@link #transformInternal(File, File) transformation method} to check
* that the sample image can be converted.
*/
- public void init()
+ @Override
+ public void afterPropertiesSet()
{
if (executer == null)
{
throw new AlfrescoRuntimeException("System runtime executer not set");
}
- super.init();
+ super.afterPropertiesSet();
if (isAvailable())
{
try
{
+ // On some platforms / versions, the -version command seems to return an error code whilst still
+ // returning output, so let's not worry about the exit code!
ExecutionResult result = this.checkCommand.execute();
- if (result.getSuccess())
- {
- this.versionString = result.getStdOut().trim();
- }
- else
- {
- setAvailable(false);
- }
+ this.versionString = result.getStdOut().trim();
}
catch (Throwable e)
{
diff --git a/source/java/org/alfresco/repo/management/DefaultManagedApplicationContextFactory.java b/source/java/org/alfresco/repo/management/DefaultManagedApplicationContextFactory.java
index 564304446f..5160aba694 100644
--- a/source/java/org/alfresco/repo/management/DefaultManagedApplicationContextFactory.java
+++ b/source/java/org/alfresco/repo/management/DefaultManagedApplicationContextFactory.java
@@ -129,16 +129,19 @@ public class DefaultManagedApplicationContextFactory extends AbstractLifecycleBe
{
"classpath*:alfresco/subsystems/" + this.beanName + "/*-context.xml"
}, false, this.parent);
- // Add all the post processors of the parent, e.g. to make sure system placeholders get expanded properly
- for (Object postProcessor : this.parent.getBeansOfType(BeanFactoryPostProcessor.class).values())
- {
- this.applicationContext.addBeanFactoryPostProcessor((BeanFactoryPostProcessor) postProcessor);
- }
+
// Add a property placeholder configurer, with the subsystem-scoped default properties
PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
configurer.setProperties(this.properties);
configurer.setIgnoreUnresolvablePlaceholders(true);
this.applicationContext.addBeanFactoryPostProcessor(configurer);
+
+ // Add all the post processors of the parent, e.g. to make sure system placeholders get expanded properly
+ for (Object postProcessor : this.parent.getBeansOfType(BeanFactoryPostProcessor.class).values())
+ {
+ this.applicationContext.addBeanFactoryPostProcessor((BeanFactoryPostProcessor) postProcessor);
+ }
+
this.applicationContext.setClassLoader(parent.getClassLoader());
this.applicationContext.refresh();
}
diff --git a/source/java/org/alfresco/repo/management/ManagedSubsystemProxyFactory.java b/source/java/org/alfresco/repo/management/ManagedSubsystemProxyFactory.java
index eaac874c43..d950b7d08b 100644
--- a/source/java/org/alfresco/repo/management/ManagedSubsystemProxyFactory.java
+++ b/source/java/org/alfresco/repo/management/ManagedSubsystemProxyFactory.java
@@ -87,6 +87,16 @@ public class ManagedSubsystemProxyFactory extends ProxyFactoryBean
}));
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public void setInterfaces(Class[] interfaces)
+ {
+ super.setInterfaces(interfaces);
+ // Make it possible to export the object via JMX
+ setTargetClass(getObjectType());
+ }
+
+
/**
* Sets the source application context factory.
*
OpenOfficeDocumentConverter
will be used.
*
- * @param converter the converter to use.
+ * @param converter
+ * the converter to use.
*/
public void setConverter(AbstractOpenOfficeDocumentConverter converter)
{
@@ -89,51 +88,48 @@ public class OpenOfficeContentTransformer extends AbstractContentTransformer2
/**
* Set a non-default location from which to load the document format mappings.
*
- * @param path a resource location supporting the file: or classpath: prefixes
+ * @param path
+ * a resource location supporting the file: or classpath: prefixes
*/
public void setDocumentFormatsConfiguration(String path)
{
this.documentFormatsConfiguration = path;
}
- public boolean isConnected()
+ public boolean isAvailable()
{
- return connection.isConnected();
+ return this.connection.isConnected();
}
- @Override
- public void register()
+ public void afterPropertiesSet() throws Exception
{
- PropertyCheck.mandatory("OpenOfficeContentTransformer", "connection", connection);
-
+ PropertyCheck.mandatory("OpenOfficeContentTransformerWorker", "connection", this.connection);
+
// load the document conversion configuration
- if (documentFormatsConfiguration != null)
+ if (this.documentFormatsConfiguration != null)
{
DefaultResourceLoader resourceLoader = new DefaultResourceLoader();
try
{
- InputStream is = resourceLoader.getResource(documentFormatsConfiguration).getInputStream();
- formatRegistry = new XmlDocumentFormatRegistry(is);
+ InputStream is = resourceLoader.getResource(this.documentFormatsConfiguration).getInputStream();
+ this.formatRegistry = new XmlDocumentFormatRegistry(is);
}
catch (IOException e)
{
- throw new AlfrescoRuntimeException(
- "Unable to load document formats configuration file: " + documentFormatsConfiguration);
+ throw new AlfrescoRuntimeException("Unable to load document formats configuration file: "
+ + this.documentFormatsConfiguration);
}
}
else
{
- formatRegistry = new XmlDocumentFormatRegistry();
+ this.formatRegistry = new XmlDocumentFormatRegistry();
}
-
+
// set up the converter
- if (converter == null)
+ if (this.converter == null)
{
- converter = new OpenOfficeDocumentConverter(connection);
+ this.converter = new OpenOfficeDocumentConverter(this.connection);
}
-
- // Register
- super.register();
}
/**
@@ -141,12 +137,12 @@ public class OpenOfficeContentTransformer extends AbstractContentTransformer2
*/
public boolean isTransformable(String sourceMimetype, String targetMimetype, TransformationOptions options)
{
- if (!isConnected())
+ if (!isAvailable())
{
// The connection management is must take care of this
return false;
}
-
+
// there are some conversions that fail, despite the converter believing them possible
if (targetMimetype.equals(MimetypeMap.MIMETYPE_XHTML))
{
@@ -160,19 +156,19 @@ public class OpenOfficeContentTransformer extends AbstractContentTransformer2
{
return false;
}
-
+
MimetypeService mimetypeService = getMimetypeService();
String sourceExtension = mimetypeService.getExtension(sourceMimetype);
String targetExtension = mimetypeService.getExtension(targetMimetype);
// query the registry for the source format
- DocumentFormat sourceFormat = formatRegistry.getFormatByFileExtension(sourceExtension);
+ DocumentFormat sourceFormat = this.formatRegistry.getFormatByFileExtension(sourceExtension);
if (sourceFormat == null)
{
// no document format
return false;
}
// query the registry for the target format
- DocumentFormat targetFormat = formatRegistry.getFormatByFileExtension(targetExtension);
+ DocumentFormat targetFormat = this.formatRegistry.getFormatByFileExtension(targetExtension);
if (targetFormat == null)
{
// no document format
@@ -193,10 +189,7 @@ public class OpenOfficeContentTransformer extends AbstractContentTransformer2
}
}
- protected void transformInternal(
- ContentReader reader,
- ContentWriter writer,
- TransformationOptions options) throws Exception
+ public void transform(ContentReader reader, ContentWriter writer, TransformationOptions options) throws Exception
{
String sourceMimetype = getMimetype(reader);
String targetMimetype = getMimetype(writer);
@@ -205,14 +198,14 @@ public class OpenOfficeContentTransformer extends AbstractContentTransformer2
String sourceExtension = mimetypeService.getExtension(sourceMimetype);
String targetExtension = mimetypeService.getExtension(targetMimetype);
// query the registry for the source format
- DocumentFormat sourceFormat = formatRegistry.getFormatByFileExtension(sourceExtension);
+ DocumentFormat sourceFormat = this.formatRegistry.getFormatByFileExtension(sourceExtension);
if (sourceFormat == null)
{
// source format is not recognised
throw new ContentIOException("No OpenOffice document format for source extension: " + sourceExtension);
}
// query the registry for the target format
- DocumentFormat targetFormat = formatRegistry.getFormatByFileExtension(targetExtension);
+ DocumentFormat targetFormat = this.formatRegistry.getFormatByFileExtension(targetExtension);
if (targetFormat == null)
{
// target format is not recognised
@@ -223,38 +216,41 @@ public class OpenOfficeContentTransformer extends AbstractContentTransformer2
// does the format support the conversion
if (!targetFormat.isExportableFrom(sourceFamily))
{
- throw new ContentIOException(
- "OpenOffice conversion not supported: \n" +
- " reader: " + reader + "\n" +
- " writer: " + writer);
+ throw new ContentIOException("OpenOffice conversion not supported: \n" + " reader: " + reader + "\n"
+ + " writer: " + writer);
}
// create temporary files to convert from and to
- File tempFromFile = TempFileProvider.createTempFile(
- "OpenOfficeContentTransformer-source-",
- "." + sourceExtension);
- File tempToFile = TempFileProvider.createTempFile(
- "OpenOfficeContentTransformer-target-",
- "." + targetExtension);
+ File tempFromFile = TempFileProvider.createTempFile("OpenOfficeContentTransformer-source-", "."
+ + sourceExtension);
+ File tempToFile = TempFileProvider
+ .createTempFile("OpenOfficeContentTransformer-target-", "." + targetExtension);
// download the content from the source reader
reader.getContent(tempFromFile);
-
+
try
{
- converter.convert(tempFromFile, sourceFormat, tempToFile, targetFormat);
+ this.converter.convert(tempFromFile, sourceFormat, tempToFile, targetFormat);
// conversion success
}
catch (OpenOfficeException e)
{
- throw new ContentIOException("OpenOffice server conversion failed: \n" +
- " reader: " + reader + "\n" +
- " writer: " + writer + "\n" +
- " from file: " + tempFromFile + "\n" +
- " to file: " + tempToFile,
- e);
+ throw new ContentIOException("OpenOffice server conversion failed: \n" + " reader: " + reader + "\n"
+ + " writer: " + writer + "\n" + " from file: " + tempFromFile + "\n" + " to file: "
+ + tempToFile, e);
}
-
+
// upload the temp output to the writer given us
writer.putContent(tempToFile);
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.alfresco.repo.content.transform.ContentTransformerWorker#getVersionString()
+ */
+ public String getVersionString()
+ {
+ // Actual version information owned by OpenOfficeConnectionTester
+ return "";
+ }
}
diff --git a/source/java/org/alfresco/repo/content/transform/ProxyContentTransformer.java b/source/java/org/alfresco/repo/content/transform/ProxyContentTransformer.java
new file mode 100644
index 0000000000..f821d22112
--- /dev/null
+++ b/source/java/org/alfresco/repo/content/transform/ProxyContentTransformer.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2005-2009 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 received 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.transform;
+
+import net.sf.jooreports.converter.DocumentFormatRegistry;
+
+import org.alfresco.service.cmr.repository.ContentReader;
+import org.alfresco.service.cmr.repository.ContentWriter;
+import org.alfresco.service.cmr.repository.TransformationOptions;
+
+/**
+ * Makes use of a {@link ContentTransformerWorker} to perform conversions.
+ *
+ * @author dward
+ */
+public class ProxyContentTransformer extends AbstractContentTransformer2
+{
+ private ContentTransformerWorker worker;
+
+ public ProxyContentTransformer()
+ {
+ }
+
+ /**
+ * @param worker
+ * the worker that the converter uses
+ */
+ public void setWorker(ContentTransformerWorker worker)
+ {
+ this.worker = worker;
+ }
+
+ /**
+ * @see DocumentFormatRegistry
+ */
+ public boolean isTransformable(String sourceMimetype, String targetMimetype, TransformationOptions options)
+ {
+ return this.worker.isTransformable(sourceMimetype, targetMimetype, options);
+ }
+
+ protected void transformInternal(ContentReader reader, ContentWriter writer, TransformationOptions options)
+ throws Exception
+ {
+ this.worker.transform(reader, writer, options);
+ }
+}
diff --git a/source/java/org/alfresco/repo/content/transform/RuntimeExecutableContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/RuntimeExecutableContentTransformerTest.java
index 86a8ef3f3c..b02588a121 100644
--- a/source/java/org/alfresco/repo/content/transform/RuntimeExecutableContentTransformerTest.java
+++ b/source/java/org/alfresco/repo/content/transform/RuntimeExecutableContentTransformerTest.java
@@ -39,20 +39,20 @@ import org.alfresco.util.TempFileProvider;
import org.alfresco.util.exec.RuntimeExec;
/**
- * @see org.alfresco.repo.content.transform.RuntimeExecutableContentTransformer
+ * @see org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker
*
* @author Derek Hulley
*/
public class RuntimeExecutableContentTransformerTest extends BaseAlfrescoTestCase
{
- private RuntimeExecutableContentTransformer transformer;
+ private ContentTransformer transformer;
@Override
protected void setUp() throws Exception
{
super.setUp();
- transformer = new RuntimeExecutableContentTransformer();
+ RuntimeExecutableContentTransformerWorker worker = new RuntimeExecutableContentTransformerWorker();
// the command to execute
RuntimeExec transformCommand = new RuntimeExec();
Map