Reversed registration order of ContentTransfomers. Self-registration means that config extensions are much simpler

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2221 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2006-01-26 16:54:16 +00:00
parent 05a1f2b65f
commit a4a4830b04
12 changed files with 271 additions and 225 deletions

View File

@@ -198,7 +198,7 @@
<ref bean="copyService" /> <ref bean="copyService" />
</property> </property>
<property name="mimetypeService"> <property name="mimetypeService">
<ref bean="mimetypeMap" /> <ref bean="mimetypeService" />
</property> </property>
</bean> </bean>
@@ -292,7 +292,7 @@
<ref bean="ExporterService"/> <ref bean="ExporterService"/>
</property> </property>
<property name="mimetypeService"> <property name="mimetypeService">
<ref bean="mimetypeMap"/> <ref bean="mimetypeService"/>
</property> </property>
<property name="nodeService"> <property name="nodeService">
<ref bean="nodeService"></ref> <ref bean="nodeService"></ref>

View File

@@ -6,132 +6,6 @@
<!-- <!--
<import resource="classpath:alfresco/replicating-content-services-context.xml" /> <import resource="classpath:alfresco/replicating-content-services-context.xml" />
--> -->
<bean id="mimetypeMap" class="org.alfresco.repo.content.MimetypeMap" init-method="init" >
<constructor-arg>
<ref bean="repoConfigService" />
</constructor-arg>
</bean>
<!-- Content Transformations -->
<bean id="transformer.StringExtracter" class="org.alfresco.repo.content.transform.StringExtractingContentTransformer" />
<bean id="transformer.BinaryPassThrough" class="org.alfresco.repo.content.transform.BinaryPassThroughContentTransformer" />
<bean id="transformer.PdfBox" class="org.alfresco.repo.content.transform.PdfBoxContentTransformer" />
<bean id="transformer.Poi" class="org.alfresco.repo.content.transform.PoiHssfContentTransformer" />
<bean id="transformer.TextMining" class="org.alfresco.repo.content.transform.TextMiningContentTransformer" />
<bean id="transformer.HtmlParser" class="org.alfresco.repo.content.transform.HtmlParserContentTransformer" />
<bean id="transformer.OpenOffice" class="org.alfresco.repo.content.transform.UnoContentTransformer" init-method="init">
<property name="mimetypeService">
<ref bean="mimetypeMap" />
</property>
</bean>
<bean id="transformer.complex.OpenOffice.PdfBox" class="org.alfresco.repo.content.transform.ComplexContentTransformer">
<property name="mimetypeService">
<ref bean="mimetypeMap" />
</property>
<property name="transformers">
<list>
<ref bean="transformer.OpenOffice" />
<ref bean="transformer.PdfBox" />
</list>
</property>
<property name="intermediateMimetypes">
<list>
<value>application/pdf</value>
</list>
</property>
</bean>
<!--
<bean id="transformer.JMagick" class="org.alfresco.repo.content.transform.magick.JMagickContentTransformer" init-method="init">
<property name="mimetypeMap">
<ref bean="mimetypeMap" />
</property>
</bean>
-->
<bean id="transformer.ImageMagick" class="org.alfresco.repo.content.transform.magick.ImageMagickContentTransformer" init-method="init">
<property name="mimetypeMap">
<ref bean="mimetypeMap" />
</property>
<property name="executer">
<bean name="transformer.ImageMagick.Command" class="org.alfresco.util.exec.RuntimeExec">
<property name="commandMap">
<map>
<entry key="Linux">
<value>imconvert ${source} ${options} ${target}</value>
</entry>
<entry key="*">
<value>imconvert "${source}" ${options} "${target}"</value>
</entry>
</map>
</property>
<property name="defaultProperties">
<props>
<prop key="options"></prop>
</props>
</property>
</bean>
</property>
</bean>
<!-- Content Transformation Regisitry -->
<bean id="contentTransformerRegistry" class="org.alfresco.repo.content.transform.ContentTransformerRegistry" >
<constructor-arg>
<ref bean="mimetypeMap" />
</constructor-arg>
<!-- explicit transformations to use -->
<property name="explicitTransformations">
<list>
<list>
<value>application/msword</value> <!-- from mimetype -->
<value>text/plain</value> <!-- to mimetype -->
<ref bean="transformer.TextMining" />
</list>
<list>
<value>application/pdf</value>
<value>text/plain</value>
<ref bean="transformer.PdfBox" />
</list>
</list>
</property>
<!-- transformers to fall back on in the event that an explicit transformation isn't defined -->
<property name="transformers">
<list>
<ref bean="transformer.StringExtracter" />
<ref bean="transformer.BinaryPassThrough" />
<ref bean="transformer.PdfBox" />
<ref bean="transformer.Poi" />
<ref bean="transformer.TextMining" />
<ref bean="transformer.HtmlParser" />
<ref bean="transformer.OpenOffice" />
<!-- <ref bean="transformer.JMagick" /> -->
<ref bean="transformer.ImageMagick" />
<ref bean="transformer.complex.OpenOffice.PdfBox" />
</list>
</property>
</bean>
<bean id="metadataExtracterRegistry" class="org.alfresco.repo.content.metadata.MetadataExtracterRegistry" >
<constructor-arg>
<ref bean="mimetypeMap" />
</constructor-arg>
<!-- metadata extracters -->
<property name="extracters">
<list>
<bean class="org.alfresco.repo.content.metadata.PdfBoxMetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.OfficeMetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.HtmlMetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.StringMetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.MP3MetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.OpenDocumentMetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.UnoMetadataExtracter" >
<constructor-arg>
<ref bean="mimetypeMap" />
</constructor-arg>
</bean>
</list>
</property>
</bean>
<bean id="fileContentStore" class="org.alfresco.repo.content.filestore.FileContentStore"> <bean id="fileContentStore" class="org.alfresco.repo.content.filestore.FileContentStore">
<constructor-arg> <constructor-arg>
@@ -159,5 +33,149 @@
<ref bean="policyComponent" /> <ref bean="policyComponent" />
</property> </property>
</bean> </bean>
<bean id="mimetypeService" class="org.alfresco.repo.content.MimetypeMap" init-method="init" >
<constructor-arg>
<ref bean="repoConfigService" />
</constructor-arg>
</bean>
<bean id="metadataExtracterRegistry" class="org.alfresco.repo.content.metadata.MetadataExtracterRegistry" >
<constructor-arg>
<ref bean="mimetypeService" />
</constructor-arg>
<!-- metadata extracters -->
<property name="extracters">
<list>
<bean class="org.alfresco.repo.content.metadata.PdfBoxMetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.OfficeMetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.HtmlMetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.StringMetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.MP3MetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.OpenDocumentMetadataExtracter" />
<bean class="org.alfresco.repo.content.metadata.UnoMetadataExtracter" >
<constructor-arg>
<ref bean="mimetypeService" />
</constructor-arg>
</bean>
</list>
</property>
</bean>
<!-- Content Transformation Regisitry -->
<bean id="contentTransformerRegistry" class="org.alfresco.repo.content.transform.ContentTransformerRegistry" >
<constructor-arg>
<ref bean="mimetypeService" />
</constructor-arg>
</bean>
<!--
Abstract bean definition defining base definition for all transformers
-->
<bean id="baseContentTransformer"
class="org.alfresco.repo.content.transform.AbstractContentTransformer"
abstract="true"
init-method="register">
<property name="mimetypeService">
<ref bean="mimetypeService" />
</property>
<property name="registry">
<ref bean="contentTransformerRegistry" />
</property>
</bean>
<!-- Content Transformations -->
<bean id="transformer.StringExtracter"
class="org.alfresco.repo.content.transform.StringExtractingContentTransformer"
parent="baseContentTransformer" />
<bean id="transformer.BinaryPassThrough"
class="org.alfresco.repo.content.transform.BinaryPassThroughContentTransformer"
parent="baseContentTransformer" />
<bean id="transformer.PdfBox"
class="org.alfresco.repo.content.transform.PdfBoxContentTransformer"
parent="baseContentTransformer" >
<property name="explicitTransformations">
<list>
<bean class="org.alfresco.repo.content.transform.ContentTransformerRegistry$TransformationKey" >
<constructor-arg><value>application/pdf</value></constructor-arg>
<constructor-arg><value>text/plain</value></constructor-arg>
</bean>
</list>
</property>
</bean>
<bean id="transformer.Poi"
class="org.alfresco.repo.content.transform.PoiHssfContentTransformer"
parent="baseContentTransformer" />
<bean id="transformer.TextMining"
class="org.alfresco.repo.content.transform.TextMiningContentTransformer"
parent="baseContentTransformer" >
<property name="explicitTransformations">
<list>
<bean class="org.alfresco.repo.content.transform.ContentTransformerRegistry$TransformationKey" >
<constructor-arg><value>application/msword</value></constructor-arg>
<constructor-arg><value>text/plain</value></constructor-arg>
</bean>
</list>
</property>
</bean>
<bean id="transformer.HtmlParser"
class="org.alfresco.repo.content.transform.HtmlParserContentTransformer"
parent="baseContentTransformer" />
<bean id="transformer.OpenOffice"
class="org.alfresco.repo.content.transform.UnoContentTransformer"
parent="baseContentTransformer"
init-method="init" />
<bean id="transformer.complex.OpenOffice.PdfBox"
class="org.alfresco.repo.content.transform.ComplexContentTransformer"
parent="baseContentTransformer" >
<property name="transformers">
<list>
<ref bean="transformer.OpenOffice" />
<ref bean="transformer.PdfBox" />
</list>
</property>
<property name="intermediateMimetypes">
<list>
<value>application/pdf</value>
</list>
</property>
</bean>
<!--
<bean id="transformer.JMagick" class="org.alfresco.repo.content.transform.magick.JMagickContentTransformer" init-method="init" />
</bean>
-->
<bean id="transformer.ImageMagick"
class="org.alfresco.repo.content.transform.magick.ImageMagickContentTransformer"
parent="baseContentTransformer"
init-method="init">
<property name="executer">
<bean name="transformer.ImageMagick.Command" class="org.alfresco.util.exec.RuntimeExec">
<property name="commandMap">
<map>
<entry key="Linux">
<value>imconvert ${source} ${options} ${target}</value>
</entry>
<entry key="*">
<value>imconvert "${source}" ${options} "${target}"</value>
</entry>
</map>
</property>
<property name="defaultProperties">
<props>
<prop key="options"></prop>
</props>
</property>
</bean>
</property>
</bean>
</beans> </beans>

View File

@@ -11,7 +11,7 @@
<!-- NOTE: using Big SearchService until AR-279 is completed --> <!-- NOTE: using Big SearchService until AR-279 is completed -->
<property name="searchService"><ref bean="SearchService" /></property> <property name="searchService"><ref bean="SearchService" /></property>
<property name="contentService"><ref bean="ContentService" /></property> <property name="contentService"><ref bean="ContentService" /></property>
<property name="mimetypeService"><ref bean="mimetypeMap" /></property> <property name="mimetypeService"><ref bean="MimetypeService" /></property>
<property name="systemPaths"> <property name="systemPaths">
<list> <list>

View File

@@ -67,7 +67,7 @@
<property name="dictionaryService"><ref bean="dictionaryService" /></property> <property name="dictionaryService"><ref bean="dictionaryService" /></property>
<property name="nodeService"><ref bean="NodeService" /></property> <property name="nodeService"><ref bean="NodeService" /></property>
<property name="fileFolderService"><ref bean="FileFolderService" /></property> <property name="fileFolderService"><ref bean="FileFolderService" /></property>
<property name="mimetypeService"><ref bean="mimetypeMap" /></property> <property name="mimetypeService"><ref bean="mimetypeService" /></property>
<property name="permissionService"><ref bean="permissionService"/></property> <property name="permissionService"><ref bean="permissionService"/></property>
</bean> </bean>

View File

@@ -234,10 +234,9 @@
<property name="proxyInterfaces"> <property name="proxyInterfaces">
<value>org.alfresco.service.cmr.repository.MimetypeService</value> <value>org.alfresco.service.cmr.repository.MimetypeService</value>
</property> </property>
<property name="target"><ref bean="mimetypeMap"/></property> <property name="target"><ref bean="mimetypeService"/></property>
<property name="interceptorNames"> <property name="interceptorNames">
<list> <list>
<idref local="MimetypeService_transaction" />
<idref local="exceptionTranslator" /> <idref local="exceptionTranslator" />
<idref bean="MimetypeService_security" /> <idref bean="MimetypeService_security" />
<idref local="MimetypeService_descriptor" /> <idref local="MimetypeService_descriptor" />
@@ -245,17 +244,6 @@
</property> </property>
</bean> </bean>
<bean id="MimetypeService_transaction" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="*">${server.transaction.mode.default}</prop>
</props>
</property>
</bean>
<bean id="MimetypeService_descriptor" parent="AlfrescoServiceDescriptor"> <bean id="MimetypeService_descriptor" parent="AlfrescoServiceDescriptor">
<property name="interface"> <property name="interface">
<value>org.alfresco.service.cmr.repository.MimetypeService</value> <value>org.alfresco.service.cmr.repository.MimetypeService</value>

View File

@@ -17,6 +17,7 @@
package org.alfresco.repo.content.transform; package org.alfresco.repo.content.transform;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
@@ -42,6 +43,8 @@ public abstract class AbstractContentTransformer implements ContentTransformer
private static final Log logger = LogFactory.getLog(AbstractContentTransformer.class); private static final Log logger = LogFactory.getLog(AbstractContentTransformer.class);
private MimetypeService mimetypeService; private MimetypeService mimetypeService;
private ContentTransformerRegistry registry;
private List<ContentTransformerRegistry.TransformationKey> explicitTransformations;
private double averageTime = 0.0; private double averageTime = 0.0;
private long count = 0L; private long count = 0L;
@@ -52,7 +55,17 @@ public abstract class AbstractContentTransformer implements ContentTransformer
{ {
averageTime = 0.0; averageTime = 0.0;
} }
/**
* The registry to auto-register with
*
* @param registry the transformer registry
*/
public void setRegistry(ContentTransformerRegistry registry)
{
this.registry = registry;
}
/** /**
* Helper setter of the mimetype service. This is not always required. * Helper setter of the mimetype service. This is not always required.
* *
@@ -71,6 +84,17 @@ public abstract class AbstractContentTransformer implements ContentTransformer
return mimetypeService; return mimetypeService;
} }
/**
* Set the transformations that this transformer can do regardless of what it returns
* via the {@link ContentTransformer#getReliability(String, String) reliability check}.
*
* @param explicitTransformations explicit key mappings
*/
public void setExplicitTransformations(List<ContentTransformerRegistry.TransformationKey> explicitTransformations)
{
this.explicitTransformations = explicitTransformations;
}
@Override @Override
public String toString() public String toString()
{ {
@@ -81,6 +105,32 @@ public abstract class AbstractContentTransformer implements ContentTransformer
return sb.toString(); return sb.toString();
} }
/**
* Registers this instance with the {@link #setRegistry(ContentTransformerRegistry) registry}
* if it is present.
*/
public void register()
{
if (registry == null)
{
if (logger.isDebugEnabled())
{
logger.debug("No registry assigned. Ignoring auto-registration.");
}
return;
}
// first register any explicit transformations
if (explicitTransformations != null)
{
for (ContentTransformerRegistry.TransformationKey key : explicitTransformations)
{
registry.addExplicitTransformer(key, this);
}
}
// register this instance for the fallback case
registry.addTransformer(this);
}
/** /**
* Convenience to fetch and check the mimetype for the given content * Convenience to fetch and check the mimetype for the given content
* *

View File

@@ -64,7 +64,7 @@ public class ContentTransformerRegistry
Assert.notNull(mimetypeMap, "The MimetypeMap is mandatory"); Assert.notNull(mimetypeMap, "The MimetypeMap is mandatory");
this.mimetypeMap = mimetypeMap; this.mimetypeMap = mimetypeMap;
this.transformers = Collections.emptyList(); // just in case it isn't set this.transformers = new ArrayList<ContentTransformer>(10);
transformationCache = new HashMap<TransformationKey, List<ContentTransformer>>(17); transformationCache = new HashMap<TransformationKey, List<ContentTransformer>>(17);
accessCount = 0; accessCount = 0;
@@ -75,50 +75,38 @@ public class ContentTransformerRegistry
} }
/** /**
* Provides a list of explicit transformers to use. * Register an individual transformer against a specific transformation. This transformation
* will take precedence over any of the generally-registered transformers.
* *
* @param transformations list of ( list of ( (from-mimetype)(to-mimetype)(transformer) ) ) * @param key the mapping from one mimetype to the next
* @param transformer the content transformer
*/ */
public void setExplicitTransformations(List<List<Object>> transformations) public void addExplicitTransformer(TransformationKey key, ContentTransformer transformer)
{ {
for (List<Object> list : transformations) transformationCache.put(key, Collections.singletonList(transformer));
// done
if (logger.isDebugEnabled())
{ {
if (list.size() != 3) logger.debug("Registered explicit transformation: \n" +
{ " key: " + key + "\n" +
throw new AlfrescoRuntimeException( " transformer: " + transformer);
"Explicit transformation is 'from-mimetype', 'to-mimetype' and 'transformer': \n" +
" list: " + list);
}
try
{
String sourceMimetype = (String) list.get(0);
String targetMimetype = (String) list.get(1);
ContentTransformer transformer = (ContentTransformer) list.get(2);
// create the transformation
TransformationKey key = new TransformationKey(sourceMimetype, targetMimetype);
// bypass all discovery and plug this directly into the cache
transformationCache.put(key, Collections.singletonList(transformer));
}
catch (ClassCastException e)
{
throw new AlfrescoRuntimeException(
"Explicit transformation is 'from-mimetype', 'to-mimetype' and 'transformer': \n" +
" list: " + list);
}
} }
} }
/** /**
* Provides a list of self-discovering transformers that the registry will fall * Registers an individual transformer that can be queried to check for applicability.
* back on if a transformation is not available from the explicitly set *
* transformations. * @param transformer a content transformer
*
* @param transformers all the available transformers that the registry can
* work with
*/ */
public void setTransformers(List<ContentTransformer> transformers) public void addTransformer(ContentTransformer transformer)
{ {
this.transformers = transformers; transformers.add(transformer);
// done
if (logger.isDebugEnabled())
{
logger.debug("Registered general transformer: \n" +
" transformer: " + transformer);
}
} }
/** /**

View File

@@ -16,9 +16,7 @@
*/ */
package org.alfresco.repo.content.transform; package org.alfresco.repo.content.transform;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.MimetypeMap;
@@ -26,6 +24,7 @@ import org.alfresco.repo.content.filestore.FileContentReader;
import org.alfresco.repo.content.filestore.FileContentWriter; import org.alfresco.repo.content.filestore.FileContentWriter;
import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService;
import org.alfresco.util.TempFileProvider; import org.alfresco.util.TempFileProvider;
/** /**
@@ -69,22 +68,20 @@ public class ContentTransformerRegistryTest extends AbstractContentTransformerTe
{ {
bytes[i] = (byte)i; bytes[i] = (byte)i;
} }
List<ContentTransformer> transformers = new ArrayList<ContentTransformer>(5);
// create some dummy transformers for reliability tests
transformers.add(new DummyTransformer(A, B, 0.3, 10L));
transformers.add(new DummyTransformer(A, B, 0.6, 10L));
transformers.add(new DummyTransformer(A, C, 0.5, 10L));
transformers.add(new DummyTransformer(A, C, 1.0, 10L));
transformers.add(new DummyTransformer(B, C, 0.2, 10L));
// create some dummy transformers for speed tests
transformers.add(new DummyTransformer(A, D, 1.0, 20L));
transformers.add(new DummyTransformer(A, D, 1.0, 20L));
transformers.add(new DummyTransformer(A, D, 1.0, 10L)); // the fast one
transformers.add(new DummyTransformer(A, D, 1.0, 20L));
transformers.add(new DummyTransformer(A, D, 1.0, 20L));
// create the dummyRegistry // create the dummyRegistry
dummyRegistry = new ContentTransformerRegistry(mimetypeMap); dummyRegistry = new ContentTransformerRegistry(mimetypeMap);
dummyRegistry.setTransformers(transformers); // 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);
// 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);
} }
/** /**
@@ -161,17 +158,18 @@ public class ContentTransformerRegistryTest extends AbstractContentTransformerTe
*/ */
public void testExplicitTransformation() public void testExplicitTransformation()
{ {
ContentTransformer dummyTransformer = new DummyTransformer( AbstractContentTransformer dummyTransformer = new DummyTransformer(
MimetypeMap.MIMETYPE_FLASH, MimetypeMap.MIMETYPE_EXCEL, 1.0, 12345); mimetypeMap,
dummyRegistry,
List<Object> transform = new ArrayList<Object>(3); MimetypeMap.MIMETYPE_FLASH, MimetypeMap.MIMETYPE_EXCEL,
transform.add(MimetypeMap.MIMETYPE_FLASH); 1.0, 12345);
transform.add(MimetypeMap.MIMETYPE_EXCEL); // set an explicit transformation
transform.add(dummyTransformer); ContentTransformerRegistry.TransformationKey key =
new ContentTransformerRegistry.TransformationKey(
List<List<Object>> explicitTransformers = Collections.singletonList(transform); MimetypeMap.MIMETYPE_FLASH, MimetypeMap.MIMETYPE_EXCEL);
// add it to the registry dummyTransformer.setExplicitTransformations(Collections.singletonList(key));
dummyRegistry.setExplicitTransformations(explicitTransformers); // register again
dummyTransformer.register();
// get the appropriate transformer for the bizarre mapping // get the appropriate transformer for the bizarre mapping
ContentTransformer checkTransformer = dummyRegistry.getTransformer( ContentTransformer checkTransformer = dummyRegistry.getTransformer(
@@ -192,13 +190,20 @@ public class ContentTransformerRegistryTest extends AbstractContentTransformerTe
private double reliability; private double reliability;
private long transformationTime; private long transformationTime;
public DummyTransformer(String sourceMimetype, String targetMimetype, public DummyTransformer(
MimetypeService mimetypeService,
ContentTransformerRegistry registry,
String sourceMimetype, String targetMimetype,
double reliability, long transformationTime) double reliability, long transformationTime)
{ {
super.setMimetypeService(mimetypeService);
super.setRegistry(registry);
this.sourceMimetype = sourceMimetype; this.sourceMimetype = sourceMimetype;
this.targetMimetype = targetMimetype; this.targetMimetype = targetMimetype;
this.reliability = reliability; this.reliability = reliability;
this.transformationTime = transformationTime; this.transformationTime = transformationTime;
// register
register();
} }
public double getReliability(String sourceMimetype, String targetMimetype) public double getReliability(String sourceMimetype, String targetMimetype)

View File

@@ -137,7 +137,8 @@ public class UnoContentTransformer extends AbstractContentTransformer
} }
/** /**
* Perform bean initialization * Connects to the OpenOffice server. If successful, then
* {@link AbstractContentTransformer#register() auto-registers}.
*/ */
public synchronized void init() public synchronized void init()
{ {
@@ -147,6 +148,8 @@ public class UnoContentTransformer extends AbstractContentTransformer
{ {
connection.connect(); connection.connect();
isConnected = true; isConnected = true;
// register
super.register();
} }
catch (ConnectException e) catch (ConnectException e)
{ {

View File

@@ -44,7 +44,6 @@ public abstract class AbstractImageMagickContentTransformer extends AbstractCont
private static final Log logger = LogFactory.getLog(AbstractImageMagickContentTransformer.class); private static final Log logger = LogFactory.getLog(AbstractImageMagickContentTransformer.class);
private MimetypeMap mimetypeMap;
private boolean available; private boolean available;
public AbstractImageMagickContentTransformer() public AbstractImageMagickContentTransformer()
@@ -52,16 +51,6 @@ public abstract class AbstractImageMagickContentTransformer extends AbstractCont
this.available = false; this.available = false;
} }
/**
* Set the mimetype map to resolve mimetypes to file extensions.
*
* @param mimetypeMap
*/
public void setMimetypeMap(MimetypeMap mimetypeMap)
{
this.mimetypeMap = mimetypeMap;
}
/** /**
* @return Returns true if the transformer is functioning otherwise false * @return Returns true if the transformer is functioning otherwise false
*/ */
@@ -82,11 +71,13 @@ public abstract class AbstractImageMagickContentTransformer extends AbstractCont
/** /**
* Checks for the JMagick and ImageMagick dependencies, using the common * Checks for the JMagick and ImageMagick dependencies, using the common
* {@link #transformInternal(File, File) transformation method} to check * {@link #transformInternal(File, File) transformation method} to check
* that the sample image can be converted. * that the sample image can be converted.
* <p>
* If initialization is successful, then autoregistration takes place.
*/ */
public void init() public void init()
{ {
if (mimetypeMap == null) if (getMimetypeService() == null)
{ {
throw new AlfrescoRuntimeException("MimetypeMap not present"); throw new AlfrescoRuntimeException("MimetypeMap not present");
} }
@@ -124,6 +115,9 @@ public abstract class AbstractImageMagickContentTransformer extends AbstractCont
} }
// we can be sure that it works // we can be sure that it works
setAvailable(true); setAvailable(true);
// register
super.register();
} }
catch (Throwable e) catch (Throwable e)
{ {
@@ -192,8 +186,8 @@ public abstract class AbstractImageMagickContentTransformer extends AbstractCont
String targetMimetype = getMimetype(writer); String targetMimetype = getMimetype(writer);
// get the extensions to use // get the extensions to use
String sourceExtension = mimetypeMap.getExtension(sourceMimetype); String sourceExtension = getMimetypeService().getExtension(sourceMimetype);
String targetExtension = mimetypeMap.getExtension(targetMimetype); String targetExtension = getMimetypeService().getExtension(targetMimetype);
if (sourceExtension == null || targetExtension == null) if (sourceExtension == null || targetExtension == null)
{ {
throw new AlfrescoRuntimeException("Unknown extensions for mimetypes: \n" + throw new AlfrescoRuntimeException("Unknown extensions for mimetypes: \n" +

View File

@@ -39,7 +39,7 @@ public class ImageMagickContentTransformerTest extends AbstractContentTransforme
executer.setDefaultProperties(Collections.singletonMap("options", "")); executer.setDefaultProperties(Collections.singletonMap("options", ""));
transformer = new ImageMagickContentTransformer(); transformer = new ImageMagickContentTransformer();
transformer.setMimetypeMap(mimetypeMap); transformer.setMimetypeService(mimetypeMap);
transformer.setExecuter(executer); transformer.setExecuter(executer);
transformer.init(); transformer.init();
} }

View File

@@ -36,7 +36,7 @@ public class JMagickContentTransformerTest extends AbstractContentTransformerTes
public void onSetUpInTransaction() throws Exception public void onSetUpInTransaction() throws Exception
{ {
transformer = new JMagickContentTransformer(); transformer = new JMagickContentTransformer();
transformer.setMimetypeMap(mimetypeMap); transformer.setMimetypeService(mimetypeMap);
transformer.init(); transformer.init();
} }