1
2
3
4
5
6
7 package org.mule.transport.stdio;
8
9 import org.mule.api.MuleContext;
10 import org.mule.api.MuleException;
11 import org.mule.api.MuleMessage;
12 import org.mule.api.endpoint.ImmutableEndpoint;
13 import org.mule.api.lifecycle.InitialisationException;
14 import org.mule.api.transport.Connector;
15 import org.mule.config.i18n.MessageFactory;
16 import org.mule.util.StringUtils;
17
18 import java.io.InputStream;
19 import java.io.OutputStream;
20
21
22
23
24
25 public class PromptStdioConnector extends StdioConnector
26 {
27 private String promptMessage;
28 private String promptMessageCode = null;
29 private String resourceBundle = null;
30 private String outputMessage;
31 private String outputMessageCode = null;
32 private long messageDelayTime = 3000;
33 private boolean firstTime = true;
34
35 public PromptStdioConnector(MuleContext context)
36 {
37 super(context);
38
39 inputStream = System.in;
40 outputStream = System.out;
41 }
42
43 protected void doInitialise() throws InitialisationException
44 {
45
46
47 StdioMessageFactory stdioMessageFactory = new StdioMessageFactory(Thread.currentThread()
48 .getContextClassLoader());
49
50
51
52 if (StringUtils.isNotBlank(resourceBundle) && StringUtils.isNotBlank(promptMessageCode))
53 {
54 promptMessage = stdioMessageFactory.getString(resourceBundle, promptMessageCode);
55 }
56 if (StringUtils.isNotBlank(resourceBundle) && StringUtils.isNotBlank(outputMessageCode))
57 {
58 outputMessage = stdioMessageFactory.getString(resourceBundle, outputMessageCode);
59 }
60 }
61
62 protected void doDispose()
63 {
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 }
81
82 protected void doConnect() throws Exception
83 {
84
85 }
86
87 protected void doDisconnect() throws Exception
88 {
89
90 }
91
92 public InputStream getInputStream()
93 {
94 return inputStream;
95 }
96
97 public void doStart()
98 {
99 firstTime = false;
100 }
101
102 public OutputStream getOutputStream()
103 {
104 return outputStream;
105 }
106
107
108
109
110 public String getPromptMessage()
111 {
112 return promptMessage;
113 }
114
115
116
117
118 public void setPromptMessage(String promptMessage)
119 {
120 this.promptMessage = promptMessage;
121 }
122
123
124
125
126 public String getPromptMessageCode()
127 {
128 return promptMessageCode;
129 }
130
131
132
133
134 public void setPromptMessageCode(String promptMessageCode)
135 {
136 this.promptMessageCode = promptMessageCode;
137 }
138
139
140
141
142 public String getResourceBundle()
143 {
144 return resourceBundle;
145 }
146
147
148
149
150
151 public void setResourceBundle(String resourceBundle)
152 {
153 this.resourceBundle = resourceBundle;
154 }
155
156
157
158
159 public String getOutputMessage()
160 {
161 return outputMessage;
162 }
163
164
165
166
167 public void setOutputMessage(String outputMessage)
168 {
169 this.outputMessage = outputMessage;
170 }
171
172
173
174
175 public String getOutputMessageCode()
176 {
177 return outputMessageCode;
178 }
179
180
181
182
183 public void setOutputMessageCode(String outputMessageCode)
184 {
185 this.outputMessageCode = outputMessageCode;
186 }
187
188 public Connector getConnector()
189 {
190 return this;
191 }
192
193 public long getMessageDelayTime()
194 {
195 if (firstTime)
196 {
197 return messageDelayTime + 4000;
198 }
199 else
200 {
201 return messageDelayTime;
202 }
203 }
204
205 public void setMessageDelayTime(long messageDelayTime)
206 {
207 this.messageDelayTime = messageDelayTime;
208 }
209
210
211 public OutputStream getOutputStream(ImmutableEndpoint endpoint, MuleMessage message) throws MuleException
212 {
213 OutputStream out;
214 String streamName = endpoint.getEndpointURI().getAddress();
215
216 if (STREAM_SYSTEM_OUT.equalsIgnoreCase(streamName))
217 {
218 out = System.out;
219 }
220 else if (STREAM_SYSTEM_ERR.equalsIgnoreCase(streamName))
221 {
222 out = System.err;
223 }
224 else
225 {
226 out = getOutputStream();
227 }
228 return out;
229 }
230
231
232
233
234
235
236
237
238 private static class StdioMessageFactory extends MessageFactory
239 {
240 private ClassLoader resourceClassLoader;
241
242 public StdioMessageFactory(ClassLoader classLoader)
243 {
244 super();
245 resourceClassLoader = classLoader;
246 }
247
248 protected String getString(String bundlePath, String code)
249 {
250 return super.getString(bundlePath, Integer.parseInt(code));
251 }
252
253 @Override
254 protected ClassLoader getClassLoader()
255 {
256 return resourceClassLoader;
257 }
258 }
259 }