cancel
Showing results for 
Search instead for 
Did you mean: 

Leveraging Imagemagick

yogesh_prabhu
Champ in-the-making
Champ in-the-making
Hi,

I am working with alfresco 3.3 Enterprise edition.
I read the following wiki: http://wiki.alfresco.com/wiki/Using_Alfresco_for_Image_Transformation
It talks about leveraging the Imagemagick with some custom transformers..but it is complete.
Has this work been completed??
Can anyone please help me with the link of the updated wiki..?

Also has anyone developed and implemented a custom transformer?

Any kind of ideas would be of great help..

Thanx in advance..
3 REPLIES 3

mrogers
Star Contributor
Star Contributor
The transformers for image magic are already part of alfresco.

You may be interested in the rendition service which is part of 3.3.  For example it is used for share create thumbnails of various sizes.

Perhaps you should start by telling the community what you are trying to do.

yogesh_prabhu
Champ in-the-making
Champ in-the-making
Hi mrogers,

Thanx for ur quick reply..
Yes, my requirement is to have the feature of rotate an image or crop an image..
Does that require a custom transformer?
Also, i would like to know is there any custom transformer written, or are there any specific steps to follow, so that i can have an idea how to implement a custom transformer..

Any sample custom transformer code would give me a good idea..

Thanx in advance..!!!

yogesh_prabhu
Champ in-the-making
Champ in-the-making
Hi,

I have got something to start with..But now i am getting an error!

I tried a custom transformer for converting Microsoft Project Files(.mpp) to Plain Text Files.

Following are the steps that i followed:
1. I got a .java file called ProjectToPlainText.java which contains the transformer code. I created a class file of this java file and added the .class file to the alfresco-repository-3.2.1.jar located at ALFRESCO_HOME/tomcat/webapps/alfresco/WEB-INF/lib

ProjectToPlainText.java

package com.someco.transformer;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.List;

import net.sf.mpxj.ProjectFile;
import net.sf.mpxj.ProjectHeader;
import net.sf.mpxj.Resource;
import net.sf.mpxj.Task;
import net.sf.mpxj.mpp.MPPReader;

import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.content.transform.AbstractContentTransformer2;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.TransformationOptions;

public class ProjectToPlainText extends AbstractContentTransformer2 {

   public static final String MIMETYPE_PROJECT = "application/vnd.ms-project";
      
   @Override
   protected void transformInternal(ContentReader reader, ContentWriter writer, TransformationOptions options) throws Exception {

      Writer out = new BufferedWriter(new OutputStreamWriter(writer.getContentOutputStream()));
      
      ProjectFile mpp = new MPPReader().read (reader.getContentInputStream());
      ProjectHeader projectHeader = mpp.getProjectHeader();
      List<Task> listAllTasks = mpp.getAllTasks();
      List<Resource> listAllResources = mpp.getAllResources();
      
      out.write(projectHeader.getProjectTitle());
      for (Task task : listAllTasks) {
         out.write("ID:" + task.getID());
         out.write(" TASK:" + task.getName());
         if (task.getNotes() != null) out.write(" NOTES:" + task.getNotes());
         if (task.getContact() != null) out.write(" CONTACT:" + task.getContact());
         out.write("\r\n");
      }
      for (Resource resource : listAllResources) {
         out.write("RESOURCE:" + resource.getName());
         if (resource.getEmailAddress() != null) out.write(" EMAIL:" + resource.getEmailAddress());
         if (resource.getNotes() != null) out.write(" NOTES:" + resource.getNotes());
         out.write("\r\n");
      }

      out.flush();
      
      if (out != null) {
         out.close();
      }

   }

   public double getReliability(String sourceMimetype, String targetMimetype) {
      
      // only support MPP -> TEXT
      if (sourceMimetype.equals(ProjectToPlainText.MIMETYPE_PROJECT) &&
               targetMimetype.equals(MimetypeMap.MIMETYPE_TEXT_PLAIN)) {
                  return 1.0;
       } else {
          return 0.0;
       }

   }

   public boolean isTransformable(String arg0, String arg1,
         TransformationOptions arg2) {
      // TODO Auto-generated method stub
      return false;
   }

}


2. I created a file called someco-transformer-context.xml and placed it at the location ALFRESCO_HOME\tomcat\webapps\alfresco\WEB-INF\classes\alfresco

someco-transformer-context.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

   <bean id="transformer.Project"
         class="com.someco.transformer.ProjectToPlainText"
         parent="baseContentTransformer" />
        
   <bean id="mimetypeConfigService" class="org.alfresco.config.xml.XMLConfigService" init-method="init">
        <constructor-arg>
            <bean class="org.alfresco.config.source.UrlConfigSource">
                <constructor-arg>
                    <list>
                        <value>classpath:alfresco/mimetype/mimetype-map.xml</value>
                        <value>classpath:alfresco/mimetype/mimetype-map-openoffice.xml</value>
                        <value>classpath:alfresco/someco-mimetype-map.xml</value>
                    </list>
                </constructor-arg>
            </bean>
        </constructor-arg>
    </bean>

</beans>

3. I created a file called someco-mimetype-map.xml and placed it at the location ALFRESCO_HOME\tomcat\webapps\alfresco\WEB-INF\classes\alfresco

someco-mimetype-map.xml

<alfresco-config area="mimetype-map">
   <!– Alfresco now includes ms-project by default so we don't need to –>
   <config evaluator="string-compare" condition="Mimetype Map">
      <mimetypes>
         <mimetype mimetype="application/vnd.ms-project" display="Microsoft Project">
            <extension>mpp</extension>
         </mimetype>
      </mimetypes>
   </config>
</alfresco-config>

Then i started the alfresco server. When i tried to transform a .mpp file to a .txt file, i got the following error in my tomcat window:

Aug 6, 2010 5:35:11 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 287859 ms
17:41:28,368 User:admin ERROR [ui.common.Utils] Failed to create content due to
error: 07060001 Transformer for 'application/vnd.ms-project' source mime type an
d 'text/plain' target mime type was not found. Operation can't be performed
org.alfresco.service.cmr.rule.RuleServiceException: 07060001 Transformer for 'ap
plication/vnd.ms-project' source mime type and 'text/plain' target mime type was
not found. Operation can't be performed
        at org.alfresco.repo.action.executer.TransformActionExecuter.executeImpl
(TransformActionExecuter.java:183)
        at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(
ActionExecuterAbstractBase.java:127)
        at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(Acti
onServiceImpl.java:711)
        at org.alfresco.repo.action.executer.CompositeActionExecuter.executeImpl
(CompositeActionExecuter.java:72)
        at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(
ActionExecuterAbstractBase.java:127)
        at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(Acti
onServiceImpl.java:711)
        at org.alfresco.repo.action.ActionServiceImpl.executeActionImpl(ActionSe
rviceImpl.java:648)
        at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServic
eImpl.java:510)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflecti
on(AopUtils.java:304)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJo
inpoint(ReflectiveMethodInvocation.java:182)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:149)
        at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterc
eptor.invoke(AlwaysProceedMethodInterceptor.java:40)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethod
Interceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.alfresco.repo.audit.AuditMethodInterceptor.proceedWithAudit(Audit
MethodInterceptor.java:238)
        at org.alfresco.repo.audit.AuditMethodInterceptor.proceed(AuditMethodInt
erceptor.java:205)
        at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInte
rceptor.java:153)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.springframework.transaction.interceptor.TransactionInterceptor.in
voke(TransactionInterceptor.java:106)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami
cAopProxy.java:204)
        at $Proxy28.executeAction(Unknown Source)
        at org.alfresco.repo.rule.RuleServiceImpl.executeRule(RuleServiceImpl.ja
va:1040)
        at org.alfresco.repo.rule.RuleServiceImpl.executePendingRule(RuleService
Impl.java:1008)
        at org.alfresco.repo.rule.RuleServiceImpl.executePendingRulesImpl(RuleSe
rviceImpl.java:979)
        at org.alfresco.repo.rule.RuleServiceImpl.executePendingRules(RuleServic
eImpl.java:952)
        at org.alfresco.repo.rule.RuleTransactionListener.beforeCommit(RuleTrans
actionListener.java:63)
        at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionS
ynchronizationImpl.doBeforeCommit(AlfrescoTransactionSupport.java:744)
        at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionS
ynchronizationImpl.doBeforeCommit(AlfrescoTransactionSupport.java:724)
        at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionS
ynchronizationImpl.beforeCommit(AlfrescoTransactionSupport.java:680)
        at org.springframework.transaction.support.TransactionSynchronizationUti
ls.triggerBeforeCommit(TransactionSynchronizationUtils.java:48)
        at org.springframework.transaction.support.AbstractPlatformTransactionMa
nager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:835)
        at org.springframework.transaction.support.AbstractPlatformTransactionMa
nager.processCommit(AbstractPlatformTransactionManager.java:645)
        at org.springframework.transaction.support.AbstractPlatformTransactionMa
nager.commit(AbstractPlatformTransactionManager.java:632)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.
commitTransactionAfterReturning(TransactionAspectSupport.java:314)
        at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(Sprin
gAwareUserTransaction.java:467)
        at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransacti
on(RetryingTransactionHelper.java:349)
        at org.alfresco.web.bean.dialog.BaseDialogBean.finish(BaseDialogBean.jav
a:130)
        at org.alfresco.web.bean.dialog.DialogManager.finish(DialogManager.java:
534)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java
:132)
        at org.apache.myfaces.application.ActionListenerImpl.processAction(Actio
nListenerImpl.java:61)
        at javax.faces.component.UICommand.broadcast(UICommand.java:109)
        at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:9
7)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1
71)
        at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(Invoke
ApplicationExecutor.java:32)
        at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl
.java:95)
        at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java
:70)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(Authentica
tionFilter.java:110)
        at sun.reflect.GeneratedMethodAccessor433.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory
$1.invoke(ChainingSubsystemProxyFactory.java:122)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami
cAopProxy.java:204)
        at $Proxy214.doFilter(Unknown Source)
        at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxy
Filter.java:88)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at org.alfresco.repo.web.filter.beans.NullFilter.doFilter(NullFilter.jav
a:74)
        at sun.reflect.GeneratedMethodAccessor433.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory
$1.invoke(ChainingSubsystemProxyFactory.java:122)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami
cAopProxy.java:204)
        at $Proxy214.doFilter(Unknown Source)
        at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxy
Filter.java:88)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ss(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:44
7)
        at java.lang.Thread.run(Thread.java:619)


It is telling me that the transformer is not found. Am i missing any step or any configuration settings??

Any kind of suggestions would be of great help..!!!

Thanks in advance..!!