1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.groovy.remote;
35
36 import java.io.BufferedReader;
37 import java.io.File;
38 import java.io.FileReader;
39 import java.io.IOException;
40 import java.io.InputStreamReader;
41 import java.io.UnsupportedEncodingException;
42 import java.util.ArrayList;
43 import java.util.List;
44
45 import org.apache.http.HttpEntity;
46 import org.apache.http.HttpResponse;
47 import org.apache.http.NameValuePair;
48 import org.apache.http.client.ClientProtocolException;
49 import org.apache.http.client.entity.UrlEncodedFormEntity;
50 import org.apache.http.client.methods.HttpGet;
51 import org.apache.http.client.methods.HttpPost;
52 import org.apache.http.impl.client.DefaultHttpClient;
53 import org.apache.http.message.BasicNameValuePair;
54 import org.apache.http.protocol.HTTP;
55 import org.apache.http.util.EntityUtils;
56 import org.slf4j.Logger;
57 import org.slf4j.LoggerFactory;
58
59
60
61
62
63 public class RemoteClientConsole {
64
65 private static final Logger log = LoggerFactory.getLogger(RemoteClientConsole.class);
66
67 private final String logingUri = "/.magnolia/pages/adminCentral.html?";
68 private final String groovyUri = "/.magnolia/pages/groovyInteractiveConsole.html?";
69
70 private DefaultHttpClient httpclient;
71 private String magnoliaUri;
72 private String user;
73 private String password;
74
75
76
77
78
79
80
81
82 public RemoteClientConsole(String magnoliaUri, String user, String password) {
83 super();
84 connect(magnoliaUri, user, password);
85 }
86
87
88
89
90
91
92
93
94
95 public boolean connect(String magnoliaUri, String user, String password) {
96 this.user = user;
97 this.password = password;
98 this.magnoliaUri = magnoliaUri;
99 log.debug("set private global variable magnoliaUri='" + magnoliaUri + "', user='" + user + "', passwoed='" + password + "'");
100 return connect();
101 }
102
103
104
105
106
107 private boolean connect() {
108
109 boolean res = false;
110 HttpPost httpost = null;
111 HttpResponse response = null;
112 HttpEntity entity = null;
113 log.debug("Try to connect to magnoliaUri='" + magnoliaUri);
114
115 if (isConnected()) {
116 log.warn("Still connected as we try to create a new connection. Will be disconnected first");
117 disconnect();
118 }
119
120 try {
121 httpclient = new DefaultHttpClient();
122
123 httpost = new HttpPost(this.magnoliaUri + logingUri);
124
125 List<NameValuePair> nvps = new ArrayList<NameValuePair>();
126 nvps.add(new BasicNameValuePair("mgnlUserId", this.user));
127 nvps.add(new BasicNameValuePair("mgnlUserPSWD", this.password));
128 httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
129
130 response = httpclient.execute(httpost);
131
132 System.out.println("Login form get: " + response.getStatusLine());
133 if (response.getStatusLine().toString().endsWith("200 OK")) {
134 res = true;
135 log.debug("Correctly connected to magnoliaUri='" + magnoliaUri);
136 } else {
137 log.warn("Could not establish a connection to magnoliaUri='" + magnoliaUri);
138 }
139
140 entity = response.getEntity();
141 EntityUtils.consume(entity);
142
143 } catch (ClientProtocolException cpe) {
144 log.error("", cpe);
145
146 cpe.printStackTrace();
147 } catch (UnsupportedEncodingException uee) {
148 log.error("", uee);
149
150 uee.printStackTrace();
151 } catch (IOException ioe) {
152 log.error("", ioe);
153
154 ioe.printStackTrace();
155 }
156
157 return res;
158 }
159
160
161
162
163
164
165 public boolean disconnect() {
166 boolean res = false;
167 if (httpclient != null && httpclient.getConnectionManager() != null) {
168 httpclient.getConnectionManager().shutdown();
169 log.debug("Correctly disconnected from magnoliaUri='" + magnoliaUri);
170 res = true;
171 }
172 return res;
173 }
174
175
176
177
178
179
180 public boolean isConnected() {
181
182 boolean res = false;
183 HttpGet httpget = null;
184 HttpEntity entity = null;
185 try {
186 httpget = new HttpGet(magnoliaUri);
187 if (httpclient == null)
188 return res;
189 HttpResponse response = httpclient.execute(httpget);
190
191
192 if (!response.getStatusLine().toString().endsWith("401 Unauthorized")) {
193 res = true;
194 }
195
196 entity = response.getEntity();
197 EntityUtils.consume(entity);
198
199 } catch (ClientProtocolException cpe) {
200 log.error("", cpe);
201
202 cpe.printStackTrace();
203 } catch (UnsupportedEncodingException uee) {
204 log.error("", uee);
205
206 uee.printStackTrace();
207 } catch (IOException ioe) {
208 log.error("", ioe);
209
210 ioe.printStackTrace();
211 }
212
213 return res;
214 }
215
216
217
218
219
220
221
222
223 public String execute(Object inputObject) {
224
225 HttpPost httpost = null;
226 HttpResponse response = null;
227 StringBuffer sb = new StringBuffer();
228 BufferedReader rd = null;
229 HttpEntity entity = null;
230
231 try {
232
233 httpost = new HttpPost(magnoliaUri + groovyUri);
234
235 List<NameValuePair> nvps = new ArrayList<NameValuePair>();
236 if (inputObject instanceof File) {
237 nvps.add(new BasicNameValuePair("code", readFileAsString((File) inputObject)));
238 } else if (inputObject instanceof String) {
239 nvps.add(new BasicNameValuePair("code", (String) inputObject));
240 } else {
241 return "Input parameter is not a String or a File";
242 }
243 nvps.add(new BasicNameValuePair("command", "evaluateGroovy"));
244 httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
245
246 response = httpclient.execute(httpost);
247
248
249 entity = response.getEntity();
250 if (entity != null) {
251
252 rd = new BufferedReader(new InputStreamReader(entity.getContent()));
253 String line;
254 while ((line = rd.readLine()) != null) {
255 sb.append(line);
256 }
257 EntityUtils.consume(entity);
258 }
259 else {
260 sb.append("No result");
261 }
262
263 } catch (ClientProtocolException cpe) {
264 log.error("", cpe);
265
266 cpe.printStackTrace();
267 } catch (UnsupportedEncodingException uee) {
268 log.error("", uee);
269
270 uee.printStackTrace();
271 } catch (IOException ioe) {
272 log.error("", ioe);
273
274 ioe.printStackTrace();
275 } finally {
276 if (rd != null) {
277 try {
278 rd.close();
279 } catch (IOException e) {
280
281 e.printStackTrace();
282 }
283 }
284 }
285 return sb.toString();
286
287 }
288
289
290
291
292
293
294 private String readFileAsString(File file) throws java.io.IOException {
295 StringBuffer fileData = new StringBuffer(1000);
296 BufferedReader reader = null;
297 try {
298 reader = new BufferedReader(new FileReader(file));
299 char[] buf = new char[1024];
300 int numRead = 0;
301 while ((numRead = reader.read(buf)) != -1) {
302 fileData.append(buf, 0, numRead);
303 }
304 } finally {
305 reader.close();
306 }
307
308 return fileData.toString();
309 }
310 }