##### Coverage Report - org.apache.turbine.util.TurbineConfig

Classes in this File | Line Coverage | Branch Coverage | Complexity
TurbineConfig |
50% | 36/72
50% | 5/10
| 1.6176470588235294;1,618

1 |  |
     package org.apache.turbine.util;
2 |  |
3 |  |
4 |  |
     /*
5 |  |
      * Licensed to the Apache Software Foundation (ASF) under one
6 |  |
      * or more contributor license agreements.  See the NOTICE file
7 |  |
      * distributed with this work for additional information
8 |  |
      * regarding copyright ownership.  The ASF licenses this file
9 |  |
      * to you under the Apache License, Version 2.0 (the
10 |  |
      * "License"); you may not use this file except in compliance
11 |  |
      * with the License.  You may obtain a copy of the License at
12 |  |
      *
13 |  |
      *   http://www.apache.org/licenses/LICENSE-2.0
14 |  |
      *
15 |  |
      * Unless required by applicable law or agreed to in writing,
16 |  |
      * software distributed under the License is distributed on an
17 |  |
      * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18 |  |
      * KIND, either express or implied.  See the License for the
19 |  |
      * specific language governing permissions and limitations
20 |  |
      * under the License.
21 |  |
      */
22 |  |
23 |  |
24 |  |
     import java.io.BufferedInputStream;
25 |  |
     import java.io.File;
26 |  |
     import java.io.FileInputStream;
27 |  |
     import java.io.FileNotFoundException;
28 |  |
     import java.io.InputStream;
29 |  |
     import java.net.MalformedURLException;
30 |  |
     import java.net.URL;
31 |  |
     import java.util.Enumeration;
32 |  |
     import java.util.HashMap;
33 |  |
     import java.util.Map;
34 |  |
     import java.util.Set;
35 |  |
     import java.util.Vector;
36 |  |
37 |  |
     import javax.servlet.RequestDispatcher;
38 |  |
     import javax.servlet.Servlet;
39 |  |
     import javax.servlet.ServletConfig;
40 |  |
     import javax.servlet.ServletContext;
41 |  |
42 |  |
     import org.apache.avalon.framework.activity.Disposable;
43 |  |
     import org.apache.avalon.framework.activity.Initializable;
44 |  |
     import org.apache.commons.logging.Log;
45 |  |
     import org.apache.commons.logging.LogFactory;
46 |  |
     import org.apache.turbine.Turbine;
47 |  |
48 |  |
     /**
49 |  |
      * A class used for initialization of Turbine without a servlet container.
50 |  |
      * <p>
51 |  |
      * If you need to use Turbine outside of a servlet container, you can
52 |  |
      * use this class for initialization of the Turbine servlet.
53 |  |
      * <p>
54 |  |
      * <blockquote><code><pre>
55 |  |
      * TurbineConfig config = new TurbineConfig(".", "conf/TurbineResources.properties");
56 |  |
      * </pre></code></blockquote>
57 |  |
      * <p>
58 |  |
      * All paths referenced in TurbineResources.properties and the path to
59 |  |
      * the properties file itself (the second argument) will be resolved
60 |  |
      * relative to the directory given as the first argument of the constructor,
61 |  |
      * here - the directory where application was started. Don't worry about
62 |  |
      * discarding the references to objects created above. They are not needed,
63 |  |
      * once everything is initialized.
64 |  |
      * <p>
65 |  |
      * In order to initialize the Services Framework outside of the Turbine Servlet,
66 |  |
      * you need to call the <code>init()</code> method. By default, this will
67 |  |
      * initialize the Resource and Logging Services and any other services you
68 |  |
      * have defined in your TurbineResources.properties file.
69 |  |
      *
70 |  |
      * TODO Make this class enforce the lifecycle contracts
71 |  |
      *
72 |  |
      * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
73 |  |
      * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
74 |  |
      * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
75 |  |
      * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
76 |  |
      * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
77 |  |
      * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
78 |  |
      * @version $Id: TurbineConfig.java 1709648 2015-10-20 17:08:10Z tv $
79 |  |
      */
80 |  |
     public class TurbineConfig
81 |  |
             implements ServletConfig, ServletContext, Initializable, Disposable
82 |  |
     {
83 |  |
         /**
84 |  |
          * Servlet initialization parameter name for the path to
85 |  |
          * TurbineConfiguration.xml file used by Turbine
86 |  |
          */
87 |  |
         public static final String CONFIGURATION_PATH_KEY = "configuration";
88 |  |
89 |  |
         /**
90 |  |
          * Servlet initialization parameter name for the path to
91 |  |
          * Turbine.properties file used by Turbine
92 |  |
          */
93 |  |
         public static final String PROPERTIES_PATH_KEY = "properties";
94 |  |
95 |  |
         /**
96 |  |
          * Default value of TurbineResources.properties file path
97 |  |
          * (<code>/WEB-INF/conf/TurbineResources.properties</code>).
98 |  |
          */
99 |  |
         public static final String PROPERTIES_PATH_DEFAULT =
100 |  |
                 "/WEB-INF/conf/TurbineResources.properties";
101 |  |
102 |  |
         /** Filenames are looked up in this directory. */
103 |  |
         protected File root;
104 |  |
105 |  |
         /** Servlet container (or emulator) attributes. */
106 |  |
         protected Map<String, Object> attributes;
107 |  |
108 |  |
         /** Turbine servlet initialization parameters. */
109 |  |
         protected Map<String, String> initParams;
110 |  |
111 |  |
         /** The Turbine servlet instance used for initialization. */
112 |  |
         private Turbine turbine;
113 |  |
114 |  |
         /** Logging */
115 | 44 |
         private final Log log = LogFactory.getLog(this.getClass());
116 |  |
117 |  |
         /**
118 |  |
          * Constructs a new TurbineConfig.
119 |  |
          *
120 |  |
          * This is the general form of the constructor. You can provide
121 |  |
          * a path to search for files, and a name-value map of init
122 |  |
          * parameters.
123 |  |
          *
124 |  |
          * <p> For the list of recognized init parameters, see
125 |  |
          * {@link org.apache.turbine.Turbine} class.
126 |  |
          *
127 |  |
          * @param path The web application root (i.e. the path for file lookup).
128 |  |
          * @param attributes Servlet container (or emulator) attributes.
129 |  |
          * @param initParams initialization parameters.
130 |  |
          */
131 |  |
         public TurbineConfig(String path, Map<String, Object> attributes,
132 |  |
                 Map<String, String> initParams)
133 | 44 |
         {
134 | 44 |
             root = new File(path);
135 | 44 |
             this.attributes = attributes;
136 | 44 |
             this.initParams = initParams;
137 | 44 |
         }
138 |  |
139 |  |
         /**
140 |  |
          * Constructs a new TurbineConfig.
141 |  |
          *
142 |  |
          * This is the general form of the constructor. You can provide
143 |  |
          * a path to search for files, and a name-value map of init
144 |  |
          * parameters.
145 |  |
          *
146 |  |
          * <p> For the list of recognized init parameters, see
147 |  |
          * {@link org.apache.turbine.Turbine} class.
148 |  |
          *
149 |  |
          * @param path The web application root (i.e. the path for file lookup).
150 |  |
          * @param initParams initialization parameters.
151 |  |
          */
152 |  |
         public TurbineConfig(String path, Map<String, String> initParams)
153 |  |
         {
154 | 41 |
             this(path, new HashMap<String, Object>(0), initParams);
155 | 41 |
         }
156 |  |
157 |  |
         /**
158 |  |
          * Constructs a TurbineConfig.
159 |  |
          *
160 |  |
          * This is a specialized constructor that allows to configure
161 |  |
          * Turbine easily in the common setups.
162 |  |
          *
163 |  |
          * @param path The web application root (i.e. the path for file lookup).
164 |  |
          * @param properties the relative path to TurbineResources.properties file
165 |  |
          */
166 |  |
         public TurbineConfig(String path, String properties)
167 |  |
         {
168 | 38 |
             this(path, new HashMap<String, String>(1));
169 | 38 |
             initParams.put(PROPERTIES_PATH_KEY, properties);
170 | 38 |
         }
171 |  |
172 |  |
         /**
173 |  |
          * Causes this class to initialize itself which in turn initializes
174 |  |
          * all of the Turbine Services that need to be initialized.
175 |  |
          */
176 |  |
         @Override
177 |  |
         public void initialize()
178 |  |
         {
179 |  |
             try
180 |  |
             {
181 | 42 |
                 turbine = new Turbine();
182 | 42 |
                 turbine.init(this);
183 |  |
             }
184 | 0 |
             catch (Exception e)
185 |  |
             {
186 | 0 |
                 log.error("TurbineConfig: Initialization failed", e);
187 | 42 |
             }
188 | 42 |
         }
189 |  |
190 |  |
         /**
191 |  |
          * Initialization requiring a HTTP <code>GET</code> request.
192 |  |
          * @param data the Turbine request
193 |  |
          */
194 |  |
         public void init(RunData data)
195 |  |
         {
196 | 0 |
             if (turbine != null)
197 |  |
             {
198 | 0 |
                 turbine.init(data);
199 |  |
             }
200 | 0 |
         }
201 |  |
202 |  |
         /**
203 |  |
          * Shutdown the Turbine System, lifecycle style
204 |  |
          *
205 |  |
          */
206 |  |
         @Override
207 |  |
         public void dispose()
208 |  |
         {
209 | 42 |
             if (turbine != null)
210 |  |
             {
211 | 42 |
                 turbine.destroy();
212 |  |
             }
213 | 42 |
         }
214 |  |
215 |  |
         /**
216 |  |
          * Returns a reference to the Turbine servlet that was initialized.
217 |  |
          *
218 |  |
          * @return a ServletContext reference
219 |  |
          */
220 |  |
         public Turbine getTurbine()
221 |  |
         {
222 | 4 |
             return turbine;
223 |  |
         }
224 |  |
225 |  |
         /**
226 |  |
          * Returns a reference to the object cast onto ServletContext type.
227 |  |
          *
228 |  |
          * @return a ServletContext reference
229 |  |
          */
230 |  |
         @Override
231 |  |
         public ServletContext getServletContext()
232 |  |
         {
233 | 86 |
             return this;
234 |  |
         }
235 |  |
236 |  |
         /**
237 |  |
          * Translates a path relative to the web application root into an
238 |  |
          * absolute path.
239 |  |
          *
240 |  |
          * @param path A path relative to the web application root.
241 |  |
          * @return An absolute version of the supplied path, or <code>null</code>
242 |  |
          * if the translated path doesn't map to a file or directory.
243 |  |
          */
244 |  |
         @Override
245 |  |
         public String getRealPath(String path)
246 |  |
         {
247 | 41 |
             String result = null;
248 | 41 |
             File f = new File(root, path);
249 |  |
250 | 41 |
             if (log.isDebugEnabled())
251 |  |
             {
252 | 39 |
                 StringBuilder sb = new StringBuilder();
253 |  |
254 | 39 |
                 sb.append("TurbineConfig.getRealPath: path '");
255 | 39 |
                 sb.append(path);
256 | 39 |
                 sb.append("' translated to '");
257 | 39 |
                 sb.append(f.getPath());
258 | 39 |
                 sb.append("' ");
259 | 39 |
                 sb.append(f.exists() ? "" : "not ");
260 | 39 |
                 sb.append("found");
261 | 39 |
                 log.debug(sb.toString());
262 |  |
             }
263 |  |
264 | 41 |
             if (f.exists())
265 |  |
             {
266 | 41 |
               result = f.getPath();
267 |  |
             }
268 |  |
             else
269 |  |
             {
270 | 0 |
                 log.error("getRealPath(\"" + path + "\") is undefined, returning null");
271 |  |
             }
272 |  |
273 | 41 |
             return result;
274 |  |
         }
275 |  |
276 |  |
         /**
277 |  |
          * Retrieves an initialization parameter.
278 |  |
          *
279 |  |
          * @param name the name of the parameter.
280 |  |
          * @return the value of the parameter.
281 |  |
          */
282 |  |
         @Override
283 |  |
         public String getInitParameter(String name)
284 |  |
         {
285 | 521 |
             return initParams.get(name);
286 |  |
         }
287 |  |
288 |  |
         /**
289 |  |
          * Retrieves an Enumeration of initialization parameter names.
290 |  |
          *
291 |  |
          * @return an Enumeration of initialization parameter names.
292 |  |
          */
293 |  |
         @Override
294 |  |
         public Enumeration<String> getInitParameterNames()
295 |  |
         {
296 | 0 |
             return new Vector<String>(initParams.keySet()).elements();
297 |  |
         }
298 |  |
299 |  |
         /**
300 |  |
          * Returns the servlet name.
301 |  |
          *
302 |  |
          * Fixed value "Turbine" is returned.
303 |  |
          *
304 |  |
          * @return the servlet name.
305 |  |
          */
306 |  |
         @Override
307 |  |
         public String getServletName()
308 |  |
         {
309 | 0 |
             return "Turbine";
310 |  |
         }
311 |  |
312 |  |
         /**
313 |  |
          * Returns the context name.
314 |  |
          *
315 |  |
          * Fixed value "Turbine" is returned
316 |  |
          *
317 |  |
          * @return the context name
318 |  |
          */
319 |  |
         @Override
320 |  |
         public String getServletContextName()
321 |  |
         {
322 | 0 |
             return "Turbine";
323 |  |
         }
324 |  |
325 |  |
         /**
326 |  |
          * Returns the context path.
327 |  |
          *
328 |  |
          * Fixed value "/turbine" is returned
329 |  |
          *
330 |  |
          * @return the context path
331 |  |
          */
332 |  |
         @Override
333 |  |
         public String getContextPath()
334 |  |
         {
335 | 0 |
             return "/turbine";
336 |  |
             }
337 |  |
338 |  |
             /**
339 |  |
          * Returns a URL to the resource that is mapped to a specified
340 |  |
          * path. The path must begin with a "/" and is interpreted
341 |  |
          * as relative to the current context root.
342 |  |
          *
343 |  |
          * @param s the path to the resource
344 |  |
          * @return a URL pointing to the resource
345 |  |
          * @exception MalformedURLException
346 |  |
          */
347 |  |
         @Override
348 |  |
         public URL getResource(String s)
349 |  |
                 throws MalformedURLException
350 |  |
         {
351 | 0 |
             return new URL("file://" + getRealPath(s));
352 |  |
         }
353 |  |
354 |  |
         /**
355 |  |
          * Returns the resource located at the named path as
356 |  |
          * an <code>InputStream</code> object.
357 |  |
          *
358 |  |
          * @param s the path to the resource
359 |  |
          * @return an InputStream object from which the resource can be read
360 |  |
          */
361 |  |
         @Override
362 |  |
         public InputStream getResourceAsStream(String s)
363 |  |
         {
364 |  |
             try
365 |  |
             {
366 | 0 |
                 FileInputStream fis = new FileInputStream(getRealPath(s));
367 | 0 |
                 return new BufferedInputStream(fis);
368 |  |
             }
369 | 0 |
             catch (FileNotFoundException e)
370 |  |
             {
371 | 0 |
                 return null;
372 |  |
             }
373 |  |
         }
374 |  |
375 |  |
         /**
376 |  |
          * Logs an error message.
377 |  |
          *
378 |  |
          * @param e an Exception.
379 |  |
          * @param m a message.
380 |  |
          * @deprecated use log(String,Throwable) instead
381 |  |
          */
382 |  |
         @Override
383 |  |
         @Deprecated
384 |  |
         public void log(Exception e, String m)
385 |  |
         {
386 | 0 |
             log.info(m, e);
387 | 0 |
         }
388 |  |
389 |  |
         /**
390 |  |
          * Logs a message.
391 |  |
          *
392 |  |
          * @param m a message.
393 |  |
          */
394 |  |
         @Override
395 |  |
         public void log(String m)
396 |  |
         {
397 | 0 |
             log.info(m);
398 | 0 |
         }
399 |  |
400 |  |
         /**
401 |  |
          * Logs an error message.
402 |  |
          *
403 |  |
          * @param t a Throwable object.
404 |  |
          * @param m a message.
405 |  |
          */
406 |  |
         @Override
407 |  |
         public void log(String m, Throwable t)
408 |  |
         {
409 | 0 |
             log.info(m, t);
410 | 0 |
         }
411 |  |
412 |  |
         /**
413 |  |
          * Returns the servlet container attribute with the given name, or
414 |  |
          * null if there is no attribute by that name.
415 |  |
          */
416 |  |
         @Override
417 |  |
         public Object getAttribute(String s)
418 |  |
         {
419 | 0 |
             return attributes.get(s);
420 |  |
         }
421 |  |
422 |  |
         /**
423 |  |
          * Returns an Enumeration containing the attribute names available
424 |  |
          * within this servlet context.
425 |  |
          */
426 |  |
         @Override
427 |  |
         public Enumeration<String> getAttributeNames()
428 |  |
         {
429 | 0 |
             return new Vector<String>(attributes.keySet()).elements();
430 |  |
         }
431 |  |
432 |  |
         // Unimplemented methods follow
433 |  |
434 |  |
         /**
435 |  |
          * Not implemented.
436 |  |
          *
437 |  |
          * A method in ServletConfig or ServletContext interface that is not
438 |  |
          * implemented and will throw <code>UnsuportedOperationException</code>
439 |  |
          * upon invocation
440 |  |
          */
441 |  |
         @Override
442 |  |
         public ServletContext getContext(String s)
443 |  |
         {
444 | 0 |
             throw new UnsupportedOperationException();
445 |  |
         }
446 |  |
447 |  |
         /**
448 |  |
          * Not implemented.
449 |  |
          *
450 |  |
          * A method in ServletConfig or ServletContext interface that is not
451 |  |
          * implemented and will throw <code>UnsuportedOperationException</code>
452 |  |
          * upon invocation
453 |  |
          */
454 |  |
         @Override
455 |  |
         public int getMajorVersion()
456 |  |
         {
457 | 0 |
             throw new UnsupportedOperationException();
458 |  |
         }
459 |  |
460 |  |
         /**
461 |  |
          * Not implemented.
462 |  |
          *
463 |  |
          * A method in ServletConfig or ServletContext interface that is not
464 |  |
          * implemented and will throw <code>UnsuportedOperationException</code>
465 |  |
          * upon invocation
466 |  |
          */
467 |  |
         @Override
468 |  |
         public String getMimeType(String s)
469 |  |
         {
470 | 0 |
             throw new UnsupportedOperationException();
471 |  |
         }
472 |  |
473 |  |
         /**
474 |  |
          * Not implemented.
475 |  |
          *
476 |  |
          * A method in ServletConfig or ServletContext interface that is not
477 |  |
          * implemented and will throw <code>UnsuportedOperationException</code>
478 |  |
          * upon invocation
479 |  |
          */
480 |  |
         @Override
481 |  |
         public int getMinorVersion()
482 |  |
         {
483 | 0 |
             throw new UnsupportedOperationException();
484 |  |
         }
485 |  |
486 |  |
         /**
487 |  |
          * Not implemented.
488 |  |
          *
489 |  |
          * A method in ServletConfig or ServletContext interface that is not
490 |  |
          * implemented and will throw <code>UnsuportedOperationException</code>
491 |  |
          * upon invocation
492 |  |
          */
493 |  |
         @Override
494 |  |
         public RequestDispatcher getNamedDispatcher(String s)
495 |  |
         {
496 | 0 |
             throw new UnsupportedOperationException();
497 |  |
         }
498 |  |
499 |  |
         /**
500 |  |
          * Not implemented.
501 |  |
          *
502 |  |
          * A method in ServletConfig or ServletContext interface that is not
503 |  |
          * implemented and will throw <code>UnsuportedOperationException</code>
504 |  |
          * upon invocation
505 |  |
          */
506 |  |
         @Override
507 |  |
         public RequestDispatcher getRequestDispatcher(String s)
508 |  |
         {
509 | 0 |
             throw new UnsupportedOperationException();
510 |  |
         }
511 |  |
512 |  |
         /**
513 |  |
          * Not implemented.
514 |  |
          *
515 |  |
          * A method in ServletContext (2.3) interface that is not implemented and
516 |  |
          * will throw <code>UnsuportedOperationException</code> upon invocation
517 |  |
          */
518 |  |
         @Override
519 |  |
         public Set<String> getResourcePaths(String s)
520 |  |
         {
521 | 0 |
             throw new UnsupportedOperationException();
522 |  |
         }
523 |  |
524 |  |
         /**
525 |  |
          * Not implemented.
526 |  |
          *
527 |  |
          * A method in ServletContext (2.3) interface that is not implemented and
528 |  |
          * will throw <code>UnsuportedOperationException</code> upon invocation
529 |  |
          */
530 |  |
         @Override
531 |  |
         public String getServerInfo()
532 |  |
         {
533 | 0 |
             throw new UnsupportedOperationException();
534 |  |
         }
535 |  |
536 |  |
         /**
537 |  |
          * Not implemented.
538 |  |
          *
539 |  |
          * A method in ServletContext interface that is not implemented and will
540 |  |
          * throw <code>UnsuportedOperationException</code> upon invocation
541 |  |
          * @deprecated As of Java Servlet API 2.1, with no direct replacement.
542 |  |
          */
543 |  |
         @Override
544 |  |
         @Deprecated
545 |  |
         public Servlet getServlet(String s)
546 |  |
         {
547 | 0 |
             throw new UnsupportedOperationException();
548 |  |
         }
549 |  |
550 |  |
         /**
551 |  |
          * Not implemented.
552 |  |
          *
553 |  |
          * A method in ServletContext interface that is not implemented and will
554 |  |
          * throw <code>UnsuportedOperationException</code> upon invocation
555 |  |
          * @deprecated As of Java Servlet API 2.1, with no replacement.
556 |  |
          */
557 |  |
         @Override
558 |  |
         @Deprecated
559 |  |
         public Enumeration<String> getServletNames()
560 |  |
         {
561 | 0 |
             throw new UnsupportedOperationException();
562 |  |
         }
563 |  |
564 |  |
         /**
565 |  |
          * Not implemented.
566 |  |
          *
567 |  |
          * A method in ServletContext interface that is not implemented and will
568 |  |
          * throw <code>UnsuportedOperationException</code> upon invocation
569 |  |
          * @deprecated As of Java Servlet API 2.0, with no replacement.
570 |  |
          */
571 |  |
         @Override
572 |  |
         @Deprecated
573 |  |
         public Enumeration<Servlet> getServlets()
574 |  |
         {
575 | 0 |
             throw new UnsupportedOperationException();
576 |  |
         }
577 |  |
578 |  |
         /**
579 |  |
          * Not implemented.
580 |  |
          *
581 |  |
          * A method in ServletContext interface that is not implemented and will
582 |  |
          * throw <code>UnsuportedOperationException</code> upon invocation
583 |  |
          */
584 |  |
         @Override
585 |  |
         public void removeAttribute(String s)
586 |  |
         {
587 | 0 |
             throw new UnsupportedOperationException();
588 |  |
         }
589 |  |
590 |  |
         /**
591 |  |
          * Not implemented.
592 |  |
          *
593 |  |
          * A method in ServletContext interface that is not implemented and will
594 |  |
          * throw <code>UnsuportedOperationException</code> upon invocation
595 |  |
          */
596 |  |
         @Override
597 |  |
         public void setAttribute(String s, Object o)
598 |  |
         {
599 | 0 |
             throw new UnsupportedOperationException();
600 |  |
         }
601 |  |
     }