KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sslexplorer > testcontainer > TestContext


1 package com.sslexplorer.testcontainer;
2
3 import java.io.File JavaDoc;
4 import java.io.FileInputStream JavaDoc;
5 import java.io.IOException JavaDoc;
6 import java.io.InputStream JavaDoc;
7 import java.lang.reflect.Method JavaDoc;
8 import java.net.InetAddress JavaDoc;
9 import java.net.URL JavaDoc;
10 import java.net.URLClassLoader JavaDoc;
11 import java.util.ArrayList JavaDoc;
12 import java.util.Collection JavaDoc;
13 import java.util.Enumeration JavaDoc;
14 import java.util.List JavaDoc;
15 import java.util.Properties JavaDoc;
16 import java.util.prefs.Preferences JavaDoc;
17
18 import javax.net.ssl.TrustManager;
19 import javax.servlet.http.HttpServletRequest JavaDoc;
20 import javax.servlet.http.HttpServletResponse JavaDoc;
21
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24
25 import com.meterware.servletunit.ServletRunner;
26 import com.sslexplorer.boot.BootProgressMonitor;
27 import com.sslexplorer.boot.Context;
28 import com.sslexplorer.boot.ContextHolder;
29 import com.sslexplorer.boot.ContextListener;
30 import com.sslexplorer.boot.LogBootProgressMonitor;
31 import com.sslexplorer.boot.PropertyClass;
32 import com.sslexplorer.boot.PropertyPreferences;
33 import com.sslexplorer.boot.RequestHandler;
34 import com.sslexplorer.boot.RequestHandlerRequest;
35 import com.sslexplorer.boot.RequestHandlerResponse;
36 import com.sslexplorer.boot.StopContextListenerThread;
37 import com.sslexplorer.boot.VersionInfo;
38 import com.sslexplorer.boot.VersionInfo.Version;
39
40 /**
41  */

42 public class TestContext implements Context {
43     final static Log log = LogFactory.getLog(TestContext.class);
44
45     static {
46             File JavaDoc f = new File JavaDoc("tmp/db");
47             f.mkdirs();
48     }
49     
50     final static File JavaDoc TMP_DIR = new File JavaDoc("tmp");
51     final static File JavaDoc DB_DIR = new File JavaDoc("tmp/db");
52     final static File JavaDoc LOG_DIR = new File JavaDoc("logs");
53
54     private File JavaDoc appDir = null;
55     private List JavaDoc<ContextListener> listeners = new ArrayList JavaDoc<ContextListener>();
56     private File JavaDoc confDir;
57     private String JavaDoc hostname;
58     private Thread JavaDoc mainThread;
59     private Preferences JavaDoc pref;
60     private boolean setup;
61     private ServletRunner runner;
62     private BootProgressMonitor bootProgressMonitor = new LogBootProgressMonitor();;
63
64     /**
65      * @param confDir
66      * @param setup
67      * @throws Exception
68      */

69     public TestContext(File JavaDoc confDir, boolean setup) throws Exception JavaDoc {
70         ContextHolder.setContext(this);
71         this.confDir = confDir;
72         loadSystemProperties();
73         if (!"".equals(System.getProperty("sslexplorer.extensions", ""))) {
74             appDir = new File JavaDoc(System.getProperty("sslexplorer.extensions"));
75         }
76         hostname = InetAddress.getLocalHost().getCanonicalHostName();
77         mainThread = Thread.currentThread();
78         this.setup = setup;
79         pref = PropertyPreferences.SYSTEM_ROOT;
80         log.info("Creating runner");
81         runner = new ServletRunner(new File JavaDoc("webapp/WEB-INF/web.xml"), "/webapp");
82         // Hashtable parms = new Hashtable();
83
// parms.put("config", "/WEB-INF/struts-config.xml");
84
// parms.put("debug", "2");
85
// parms.put("detail", "2");
86
// log.info("Registering servlet");
87
// sr.registerServlet( "action", CoreServlet.class.getName(), parms );
88
// ServletUnitClient sc = sr.newClient();
89
// WebRequest request = new PostMethodWebRequest( "http://localhost/" );
90
// request.setParameter( "color", "red" );
91
// WebResponse response = sc.getResponse( request );
92
// assertNotNull( "No response received", response );
93
// assertEquals( "content type", "text/plain", response.getContentType()
94
// );
95
// assertEquals( "requested resource", "You selected red",
96
// response.getText() );
97
}
98
99     private void loadSystemProperties() {
100
101         /*
102          * Read in system properties from a resource, more a debugging aid than
103          * anything else
104          */

105         InputStream JavaDoc in = null;
106         try {
107             File JavaDoc f = new File JavaDoc(getConfDirectory(), "system.properties");
108             in = new FileInputStream JavaDoc(f);
109             Properties JavaDoc p = new Properties JavaDoc();
110             p.load(in);
111             for (Enumeration JavaDoc e = p.keys(); e.hasMoreElements();) {
112                 String JavaDoc k = (String JavaDoc) e.nextElement();
113                 
114                 // The test may have already specified devExtensions
115
if(!k.equals("sslexplorer.devExtensions") || System.getProperty("sslexplorer.devExtensions") == null) {
116                     System.getProperties().setProperty(k, p.getProperty(k).trim());
117                 }
118             }
119         } catch (IOException JavaDoc e) {
120             // Dont care
121
} finally {
122             if (in != null) {
123                 try {
124                     in.close();
125                 } catch (IOException JavaDoc ioe) {
126
127                 }
128             }
129         }
130     }
131
132     /**
133      * @param args
134      * @throws Exception
135      */

136     public static void main(String JavaDoc[] args) throws Exception JavaDoc {
137         File JavaDoc conf = new File JavaDoc("conf");
138         boolean setup = false;
139         for (int i = 0; i < args.length; i++) {
140             if (args[i].equals("--conf")) {
141                 conf = new File JavaDoc(args[++i]);
142             } else if (args[i].equals("--install") || args[i].equals("--setup")) {
143                 setup = true;
144             } else {
145                 throw new Exception JavaDoc(TestContext.class.getName() + " only supports --conf=<confdir> or --install arguments");
146             }
147         }
148         new TestContext(conf, setup);
149     }
150
151     public void addContextListener(ContextListener contextListener) {
152         listeners.add(contextListener);
153
154     }
155
156     public void addContextLoaderURL(URL JavaDoc u) {
157         try {
158             URLClassLoader JavaDoc sysloader = (URLClassLoader JavaDoc) getClass().getClassLoader();
159             Class JavaDoc sysclass = URLClassLoader JavaDoc.class;
160             Method JavaDoc method = sysclass.getDeclaredMethod("addURL", new Class JavaDoc[] { URL JavaDoc.class });
161             method.setAccessible(true);
162             method.invoke(sysloader, new Object JavaDoc[] { u });
163             if (log.isInfoEnabled())
164                 log.info(u.toExternalForm() + " added to context classloader");
165         } catch (Exception JavaDoc e) {
166             log.error("Failed to add to classpath.", e);
167         }
168     }
169
170     public void addResourceBase(URL JavaDoc url) {
171         // Don't care
172
}
173
174     public void addWebApp(String JavaDoc contextPathSpec, String JavaDoc webApp) throws Exception JavaDoc {
175         // Don't care
176
}
177     
178     public Collection JavaDoc<URL JavaDoc> getResourceBases() {
179         return new ArrayList JavaDoc<URL JavaDoc>();
180     }
181
182     public String JavaDoc deobfuscatePassword(String JavaDoc s) {
183         if (s.startsWith("OBF:"))
184             s = s.substring(4);
185
186         byte[] b = new byte[s.length() / 2];
187         int l = 0;
188         for (int i = 0; i < s.length(); i += 4) {
189             String JavaDoc x = s.substring(i, i + 4);
190             int i0 = Integer.parseInt(x, 36);
191             int i1 = (i0 / 256);
192             int i2 = (i0 % 256);
193             b[l++] = (byte) ((i1 + i2 - 254) / 2);
194         }
195
196         return new String JavaDoc(b, 0, l);
197     }
198
199     public void deregisterRequestHandler(RequestHandler requestHandler) {
200         // Don't care
201
}
202
203     public File JavaDoc getApplicationDirectory() {
204         return appDir == null ? new File JavaDoc(getConfDirectory(), "extensions") : appDir;
205     }
206
207     public File JavaDoc getConfDirectory() {
208         return confDir;
209     }
210
211     public File JavaDoc getDBDirectory() {
212         return DB_DIR;
213     }
214
215     public String JavaDoc getHostname() {
216         return hostname;
217     }
218
219     public File JavaDoc getLogDirectory() {
220         return LOG_DIR;
221     }
222
223     public Thread JavaDoc getMainThread() {
224         return mainThread;
225     }
226
227     public int getPort() {
228         // No port
229
return 0;
230     }
231
232     public Preferences JavaDoc getPreferences() {
233         return pref;
234     }
235
236     public File JavaDoc getTempDirectory() {
237         return TMP_DIR;
238     }
239
240     public Version getVersion() {
241         return VersionInfo.getVersion();
242     }
243
244     public boolean isRestartAvailableMode() {
245         return false;
246     }
247
248     public boolean isSetupMode() {
249         return setup;
250     }
251
252     public String JavaDoc obfuscatePassword(String JavaDoc s) {
253         StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
254         byte[] b = s.getBytes();
255
256         synchronized (buf) {
257             buf.append("OBF:");
258             for (int i = 0; i < b.length; i++) {
259                 byte b1 = b[i];
260                 byte b2 = b[s.length() - (i + 1)];
261                 int i1 = (int) b1 + (int) b2 + 127;
262                 int i2 = (int) b1 - (int) b2 + 127;
263                 int i0 = i1 * 256 + i2;
264                 String JavaDoc x = Integer.toString(i0, 36);
265
266                 switch (x.length()) {
267                     case 1:
268                         buf.append('0');
269                     case 2:
270                         buf.append('0');
271                     case 3:
272                         buf.append('0');
273                     default:
274                         buf.append(x);
275                 }
276             }
277             return buf.toString();
278         }
279     }
280
281     public void registerRequestHandler(RequestHandler requestHandler) {
282         // Don't care
283
}
284
285     public void removeContextListener(ContextListener contextListener) {
286         listeners.remove(contextListener);
287     }
288
289     public void removeResourceBase(URL JavaDoc url) {
290         // Don't care
291
}
292
293     /**
294      * @param key
295      * @param value
296      * @return String
297      */

298     public String JavaDoc setContextProperty(String JavaDoc key, String JavaDoc value) {
299         // No context properties
300
return null;
301     }
302
303     public void setTrustMananger(TrustManager trustManager, boolean require) {
304         // No SSL
305
}
306
307     public void shutdown(boolean restart) {
308         // Inform all context listeners of what is happening
309
for (ContextListener l : listeners) {
310             new StopContextListenerThread(l).waitForStop();
311         }
312         runner.shutDown();
313     }
314
315     public URL JavaDoc[] getContextLoaderClassPath() {
316         return ((URLClassLoader JavaDoc) getClass().getClassLoader()).getURLs();
317     }
318
319     public ClassLoader JavaDoc getContextLoader() {
320         return getClass().getClassLoader();
321     }
322
323     /**
324      * @return Context
325      * @throws Exception
326      */

327     public static Context getTestContext() throws Exception JavaDoc {
328         return new TestContext(new File JavaDoc("devconf"), false);
329     }
330
331     public void setResourceAlias(String JavaDoc uri, String JavaDoc location) {
332         // Not supported
333
}
334
335     public PropertyClass getConfig() {
336         return null;
337     }
338
339     public void removeResourceAlias(String JavaDoc uri) {
340         // Not supported
341
}
342
343     public BootProgressMonitor getBootProgressMonitor() {
344         return bootProgressMonitor;
345     }
346
347     public void registerRequestHandler(RequestHandler requestHandler, HandlerProtocol protocol) {
348         // DONT CARE
349

350     }
351
352     public HttpServletRequest JavaDoc createServletRequest(RequestHandlerRequest request) {
353         // TODO Auto-generated method stub
354
return null;
355     }
356
357     public HttpServletResponse JavaDoc createServletResponse(RequestHandlerResponse response, HttpServletRequest JavaDoc request) {
358         // TODO Auto-generated method stub
359
return null;
360     }
361 }
Popular Tags