1
2
3
4
5
6
7
8
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
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
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 }