View Javadoc

1   /*
2    * $Id: VisualizerService.java 7963 2007-08-21 08:53:15Z 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  package org.mule.tools.visualizer.service;
11  
12  import org.mule.MuleManager;
13  import org.mule.config.ConfigurationException;
14  import org.mule.impl.MuleMessage;
15  import org.mule.impl.UMODescriptorAware;
16  import org.mule.tools.visualizer.MuleVisualizer;
17  import org.mule.tools.visualizer.config.GraphConfig;
18  import org.mule.tools.visualizer.config.GraphEnvironment;
19  import org.mule.tools.visualizer.maven.MuleVisualizerPlugin;
20  import org.mule.umo.UMODescriptor;
21  import org.mule.umo.UMOEventContext;
22  import org.mule.umo.UMOMessage;
23  import org.mule.umo.lifecycle.Callable;
24  import org.mule.umo.lifecycle.Initialisable;
25  import org.mule.umo.lifecycle.InitialisationException;
26  
27  import java.io.File;
28  import java.util.ArrayList;
29  import java.util.Iterator;
30  import java.util.List;
31  import java.util.Set;
32  
33  import javax.activation.DataHandler;
34  import javax.activation.FileDataSource;
35  
36  /** TODO */
37  public class VisualizerService extends MuleVisualizerPlugin implements Callable, Initialisable, UMODescriptorAware
38  {
39      protected GraphConfig config;
40      protected GraphEnvironment environment;
41      protected MuleVisualizer visualizer;
42      protected UMODescriptor descriptor;
43  
44      public void setDescriptor(UMODescriptor descriptor) throws ConfigurationException
45      {
46          this.descriptor = descriptor;
47      }
48  
49      public void initialise() throws InitialisationException
50      {
51          try
52          {
53              config = buildConfig();
54              config.setOutputDirectory(MuleManager.getConfiguration().getWorkingDirectory() + File.pathSeparator + "visualizer");
55              environment = new GraphEnvironment(config);
56              visualizer = new MuleVisualizer(environment);
57          }
58          catch (Exception e)
59          {
60              throw new InitialisationException(e, this);
61          }
62      }
63  
64      public Object onCall(UMOEventContext eventContext) throws Exception
65      {
66          UMOMessage msg = eventContext.getMessage();
67          Set names = msg.getAttachmentNames();
68          if(names.size()==0)
69          {
70              throw new IllegalArgumentException("There were no files attached to process");
71          }
72  
73          List files = new ArrayList(names.size());
74          for (Iterator iterator = names.iterator(); iterator.hasNext();)
75          {
76              String s = (String) iterator.next();
77              DataHandler dh = msg.getAttachment(s);
78              if(dh.getDataSource().getContentType().startsWith("text/xml"))
79              {
80                  files.add(dh.getInputStream());
81              }
82          }
83          if(files.size()==0)
84          {
85              throw new IllegalArgumentException("There were no Xml attachments for email: " + msg.getProperty("subject"));
86          }
87          List results = visualizer.visualize(files);
88          UMOMessage result = new MuleMessage("Thanks for using Mule Visualizer!");
89          if(results==null)
90          {
91              return null;
92          }
93          
94          for (Iterator iterator = results.iterator(); iterator.hasNext();)
95          {
96              String s = (String) iterator.next();
97              File f= new File(s);
98              FileDataSource ds = new FileDataSource(f);
99              result.addAttachment(f.getName(), new DataHandler(ds));
100         }
101 
102         //Also attache the source files
103         for (Iterator iterator = names.iterator(); iterator.hasNext();)
104         {
105             String s = (String) iterator.next();
106             result.addAttachment(s, msg.getAttachment(s));
107         }
108         
109         return result;
110     }
111 
112 
113 }