1
2
3
4
5
6
7
8
9
10
11 package org.mule.transformer;
12
13 import org.mule.RegistryContext;
14 import org.mule.api.DefaultMuleException;
15 import org.mule.api.MuleException;
16 import org.mule.api.lifecycle.InitialisationException;
17 import org.mule.api.transformer.Transformer;
18 import org.mule.config.i18n.CoreMessages;
19 import org.mule.transport.service.TransportFactoryException;
20 import org.mule.transport.service.TransportServiceDescriptor;
21
22 import java.util.Iterator;
23 import java.util.LinkedList;
24 import java.util.List;
25 import java.util.StringTokenizer;
26
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29
30 public class TransformerUtils
31 {
32
33 public static final String COMMA = ",";
34
35 private static Log logger = LogFactory.getLog(AbstractTransformer.class);
36
37 public static void initialiseAllTransformers(List transformers) throws InitialisationException
38 {
39 if (transformers != null)
40 {
41 Iterator transformer = transformers.iterator();
42 while (transformer.hasNext())
43 {
44 ((Transformer) transformer.next()).initialise();
45 }
46 }
47 }
48
49 public static String toString(List transformers)
50 {
51 StringBuffer buffer = new StringBuffer();
52 Iterator transformer = transformers.iterator();
53 while (transformer.hasNext())
54 {
55 buffer.append(transformer.next().toString());
56 if (transformer.hasNext())
57 {
58 buffer.append(" -> ");
59 }
60 }
61 return buffer.toString();
62 }
63
64 public static Transformer firstOrNull(List transformers)
65 {
66 if (transformers != null && 0 != transformers.size())
67 {
68 return (Transformer) transformers.get(0);
69 }
70 else
71 {
72 return null;
73 }
74 }
75
76 public static boolean isSourceTypeSupportedByFirst(List transformers, Class clazz)
77 {
78 Transformer transformer = firstOrNull(transformers);
79 return null != transformer && transformer.isSourceTypeSupported(clazz);
80 }
81
82 protected static interface TransformerSource
83 {
84 public List getTransformers() throws TransportFactoryException;
85 }
86
87 protected static List getTransformersFromSource(TransformerSource source)
88 {
89 try
90 {
91 List transformers = source.getTransformers();
92 TransformerUtils.initialiseAllTransformers(transformers);
93 return transformers;
94 }
95 catch (MuleException e)
96 {
97 logger.debug(e.getMessage(), e);
98 return null;
99 }
100 }
101
102 public static List getDefaultInboundTransformers(final TransportServiceDescriptor serviceDescriptor)
103 {
104 return getTransformersFromSource(new TransformerSource()
105 {
106 public List getTransformers() throws TransportFactoryException
107 {
108 return serviceDescriptor.createInboundTransformers();
109 }
110 });
111 }
112
113 public static List getDefaultResponseTransformers(final TransportServiceDescriptor serviceDescriptor)
114 {
115 return getTransformersFromSource(new TransformerSource()
116 {
117 public List getTransformers() throws TransportFactoryException
118 {
119 return serviceDescriptor.createResponseTransformers();
120 }
121 });
122 }
123
124 public static List getDefaultOutboundTransformers(final TransportServiceDescriptor serviceDescriptor)
125 {
126 return getTransformersFromSource(new TransformerSource()
127 {
128 public List getTransformers() throws TransportFactoryException
129 {
130 return serviceDescriptor.createOutboundTransformers();
131 }
132 });
133 }
134
135
136
137
138
139
140
141
142
143 public static List getTransformers(String names) throws DefaultMuleException
144 {
145 if (null != names)
146 {
147 List transformers = new LinkedList();
148 StringTokenizer st = new StringTokenizer(names, COMMA);
149 while (st.hasMoreTokens())
150 {
151 String key = st.nextToken().trim();
152 Transformer transformer = RegistryContext.getRegistry().lookupTransformer(key);
153
154 if (transformer == null)
155 {
156 throw new DefaultMuleException(CoreMessages.objectNotRegistered("Transformer", key));
157 }
158 transformers.add(transformer);
159 }
160 return transformers;
161 }
162 else
163 {
164 return null;
165 }
166 }
167
168 }