Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/mule/umo/impl/MuleEvent.java


1   /* 
2    * $Header: /cvsroot/mule/mule/src/java/org/mule/umo/impl/MuleEvent.java,v 1.10 2003/10/20 21:44:38 rossmason Exp $
3    * $Revision: 1.10 $
4    * $Date: 2003/10/20 21:44:38 $
5    * ------------------------------------------------------------------------------------------------------
6    * 
7    * Copyright (c) Cubis Limited. All rights reserved.
8    * http://www.cubis.co.uk 
9    * 
10   * The software in this package is published under the terms of the BSD
11   * style license a copy of which has been included with this distribution in
12   * the LICENSE.txt file. 
13   *
14   */
15  package org.mule.umo.impl;
16  
17  import java.io.IOException;
18  import java.util.EventObject;
19  import java.util.HashMap;
20  import java.util.Iterator;
21  
22  import org.apache.commons.lang.builder.ToStringBuilder;
23  import org.apache.commons.logging.Log;
24  import org.apache.commons.logging.LogFactory;
25  import org.mule.MuleException;
26  import org.mule.umo.UMOEvent;
27  import org.mule.umo.UMOProviderDescriptor;
28  import org.mule.umo.provider.UMOConnector;
29  import org.mule.umo.provider.UMOMessageAdapter;
30  import org.mule.umo.transformer.TransformerException;
31  import org.mule.umo.transformer.UMOTransformer;
32  import org.mule.util.UUID;
33  import org.mule.util.Utility;
34  
35  /**
36   *  <p><code>MuleEvent</code> represents any data event occuring in the Mule environment. All data
37   * sent or received within the mule environment will be passed between components as an UMOEvent.
38   * </p>
39   * <p>The UMOEvent holds some data and provides helper methods for obtaining the data in a format that the receiving
40   * Mule UMO understands. The event can also maintain any number of properties that can be set and retrieved by Mule UMO
41   * components.</p>
42   *
43   * @author <a href="mailto:ross.mason@cubis.co.uk">Ross Mason</a>
44   * @version $Revision: 1.10 $
45   */
46  
47  public class MuleEvent extends EventObject implements UMOEvent
48  {
49      /** The logger for this class */
50      private static final transient Log log = LogFactory.getLog(MuleEvent.class);
51      
52      /** The provider associated with the event */
53      private transient UMOProviderDescriptor provider = null;
54      
55      /** the Universally Unique ID for the event */
56      private UUID id = null;
57      
58      /** The previous event to this event */
59      private transient UMOEvent previous = null;
60      
61      /** The message adapter used to read the message payload of the event */
62      private transient UMOMessageAdapter adapter = null;
63  
64      /**
65       * Contructor.
66       * @param message the event message
67       * @param provider the provider to associate with the event
68       * @param previousEvent the previous event if any
69       * @throws MuleException If a Message Adapter for the supplied message cannot be created
70       * @see UMOMessageAdapter
71       */
72      public MuleEvent(Object message, UMOProviderDescriptor provider, UMOEvent previousEvent) throws MuleException
73      {
74          super(message);
75          this.provider = provider;
76          previous = previousEvent;
77  
78          id = new UUID();
79          UMOConnector connector = provider.getConnector();
80  
81          try
82          {
83              adapter = connector.getMessageAdapter(message);
84              //Transfer previous event properties
85              if (previous != null)
86              {
87                  Object key = null;
88                  for (Iterator i = previous.getPropertyNames(); i.hasNext();)
89                  {
90                      key = i.next();
91                      if (adapter.getProperty(key) != null)
92                      {
93                          if (log.isDebugEnabled())
94                              log.debug("Adding property to message: " + key);
95                          adapter.setProperty(key, previous.getProperty(key.toString()));
96                      }
97                      else
98                      {
99                          if (log.isDebugEnabled())
100                             log.debug("Message already has property: " + key);
101                     }
102                 }
103 
104             }
105         }
106         catch (Exception e)
107         {
108             throw new MuleException("Failed to create Adapter for message: " + e.getMessage(), e);
109         }
110     }
111 
112     /* (non-Javadoc)
113      * @see org.mule.umo.UMOEvent#getMessage()
114      */
115     public Object getMessage()
116     {
117         return adapter.getMessage();
118     }
119 
120     /* (non-Javadoc)
121      * @see org.mule.umo.UMOEvent#getMessageAsBytes()
122      */
123     public byte[] getMessageAsBytes() throws MuleException
124     {
125         try
126         {
127             return adapter.getMessageAsBytes();
128         }
129         catch (Exception e)
130         {
131             throw new MuleException(
132                 "Failed while retrieving the current message. Message is of type "
133                     + adapter.getMessage().getClass().getName(),
134                 e);
135         }
136     }
137 
138     /* (non-Javadoc)
139      * @see org.mule.umo.UMOEvent#getTransformedMessage()
140      */
141     public Object getTransformedMessage() throws TransformerException
142     {
143         UMOTransformer tran = provider.getTransformer();
144         Object transMessage = null;
145         if (tran != null)
146         {
147             if(tran.getReturnClass().isAssignableFrom(adapter.getMessage().getClass())) {
148                 return adapter.getMessage();
149             } else {
150                 transMessage = tran.sessionTransform(adapter.getMessage());
151             }
152         }
153         else
154         {
155             transMessage = adapter.getMessage();
156         }
157         return transMessage;
158     }
159 
160     /**
161      * When a transform is performed on an event payload is is done within a transformer session.
162      * this method allows the rollback of a transformation
163      * @return the message as it was before the transform
164      * @throws TransformerException if there is no session in progress of the transformation cannot be rolled back
165      */
166     public Object rollbackTransform() throws TransformerException
167     {
168         UMOTransformer tran = provider.getTransformer();
169         Object rollbackMessage = null;
170         if (tran != null)
171         {
172             rollbackMessage = tran.rollbackSession();
173         }
174         else
175         {
176             rollbackMessage = adapter.getMessage();
177         }
178         return rollbackMessage;
179 
180     }
181 
182     /* (non-Javadoc)
183      * @see org.mule.umo.UMOEvent#getTransformedMessageAsBytes()
184      */
185     public byte[] getTransformedMessageAsBytes() throws TransformerException
186     {
187         try
188         {
189             Object msg = provider.doTransformation(adapter.getMessage());
190             return Utility.objectToByteArray(msg);
191         }
192         catch (IOException e)
193         {
194             throw new TransformerException("Failed to convert transformed message to byte[]: " + e, e);
195         }
196     }
197 
198     /* (non-Javadoc)
199      * @see org.mule.umo.UMOEvent#getMessageAsString()
200      */
201     public String getMessageAsString() throws MuleException
202     {
203         try
204         {
205             return adapter.getMessageAsString();
206 
207         }
208         catch (Exception e)
209         {
210             throw new MuleException(
211                 "Failed while retrieving the current message. Message is of type "
212                     + adapter.getMessage().getClass().getName(),
213                 e);
214         }
215     }
216 
217     /* (non-Javadoc)
218      * @see org.mule.umo.UMOEvent#getId()
219      */
220     public UUID getId()
221     {
222         return id;
223     }
224 
225     /* (non-Javadoc)
226      * @see org.mule.umo.UMOEvent#getPreviousEvent()
227      */
228     public UMOEvent getPreviousEvent()
229     {
230         return previous;
231     }
232 
233     /* (non-Javadoc)
234      * @see org.mule.umo.UMOEvent#getProperty(java.lang.String)
235      */
236     public Object getProperty(String name)
237     {
238         return adapter.getProperty(name);
239     }
240 
241     /* (non-Javadoc)
242      * @see org.mule.umo.UMOEvent#getProperty(java.lang.String, java.lang.Object)
243      */
244     public Object getProperty(String name, Object defaultValue)
245     {
246         Object obj = null;
247         obj = adapter.getProperty(name);
248 
249         if (obj == null)
250             obj = defaultValue;
251         return obj;
252     }
253 
254     /* (non-Javadoc)
255      * @see org.mule.umo.UMOEvent#setProperty(java.lang.String, java.lang.Object)
256      */
257     public void setProperty(String name, Object value)
258     {
259         adapter.setProperty(name, value);
260     }
261 
262     /* (non-Javadoc)
263      * @see org.mule.umo.UMOEvent#getPropertyNames()
264      */
265     public Iterator getPropertyNames()
266     {
267         return adapter.getPropertyNames();
268     }
269 
270     /* (non-Javadoc)
271      * @see org.mule.umo.UMOEvent#getProperties()
272      */
273     public HashMap getProperties()
274     {
275         HashMap clone = new HashMap();
276         Object key;
277         for (Iterator i = adapter.getPropertyNames(); i.hasNext();)
278         {
279             key = i.next();
280             clone.put(key, adapter.getProperty(key));
281         }
282         return clone;
283     }
284 
285     /* (non-Javadoc)
286      * @see org.mule.umo.UMOEvent#getTimeout()
287      */
288     public long getTimeout()
289     {
290         //@TODO implement timeout
291         return 0;
292     }
293 
294     /* (non-Javadoc)
295      * @see org.mule.umo.UMOEvent#getProvider()
296      */
297     public UMOProviderDescriptor getProvider()
298     {
299         return provider;
300     }
301 
302     /* (non-Javadoc)
303      * @see java.lang.Object#toString()
304      */
305     public String toString()
306     {
307         return ToStringBuilder.reflectionToString(this);
308     }
309 }