View Javadoc

1   /*
2    * $Id: TransformerReference.java 7976 2007-08-21 14:26:13Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.config.builders;
12  
13  import org.mule.config.i18n.CoreMessages;
14  import org.mule.umo.lifecycle.InitialisationException;
15  import org.mule.umo.transformer.UMOTransformer;
16  import org.mule.util.MuleObjectHelper;
17  
18  import org.apache.commons.beanutils.BeanUtils;
19  import org.apache.commons.logging.Log;
20  import org.apache.commons.logging.LogFactory;
21  
22  /**
23   * <code>TransformerReference</code> maintains a transformer reference.
24   * Transformers are clones when they are looked up, if there are container properties
25   * set on the transformer the clone will have an inconsistent state if container
26   * properties have not been resolved. This class holds the refernece and is invoked
27   * after the container properties are resolved.
28   */
29  public class TransformerReference
30  {
31      /**
32       * logger used by this class
33       */
34      protected static final Log logger = LogFactory.getLog(TransformerReference.class);
35  
36      private final String propertyName;
37      private final String transformerName;
38      private final Object object;
39  
40      public TransformerReference(String propertyName, String transformerName, Object object)
41      {
42          this.propertyName = propertyName;
43          this.transformerName = transformerName;
44          this.object = object;
45      }
46  
47      public String getPropertyName()
48      {
49          return propertyName;
50      }
51  
52      public String getTransformerName()
53      {
54          return transformerName;
55      }
56  
57      public Object getObject()
58      {
59          return object;
60      }
61  
62      public void resolveTransformer() throws InitialisationException
63      {
64          UMOTransformer trans = null;
65          try
66          {
67              trans = MuleObjectHelper.getTransformer(transformerName, " ");
68              if (trans == null)
69              {
70                  throw new InitialisationException(
71                      CoreMessages.objectNotRegisteredWithManager("Transformer '" + transformerName + "'"), object);
72              }
73              logger.info("Setting transformer: " + transformerName + " on " + object.getClass().getName()
74                          + "." + propertyName);
75  
76              BeanUtils.setProperty(object, propertyName, trans);
77          }
78          catch (InitialisationException e)
79          {
80              throw e;
81          }
82          catch (Exception e)
83          {
84              throw new InitialisationException(
85                  CoreMessages.cannotSetPropertyOnObjectWithParamType(propertyName, 
86                      object.getClass(), trans.getClass()), e);
87          }
88      }
89  }