1 /**
2 * Licensed under the Artistic License; you may not use this file
3 * except in compliance with the License.
4 * You may obtain a copy of the License at
5 *
6 * http://displaytag.sourceforge.net/license.html
7 *
8 * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
9 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
10 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
11 */
12 package org.displaytag.util;
13
14 import javax.servlet.jsp.JspTagException;
15
16 import org.displaytag.Messages;
17
18
19 /**
20 * An user-friendly dependency checker. This will check the presence of libraries needed by displaytag, throwing an
21 * Exception with an informative message if the library is missing or the version is not compatible.
22 * @author Fabrizio Giustina
23 * @version $Revision: 1081 $ ($Author: fgiust $)
24 */
25 public final class DependencyChecker
26 {
27
28 /**
29 * Has the commons-lang dependency been checked?
30 */
31 private static boolean commonsLangChecked;
32
33 /**
34 * Don't instantiate.
35 */
36 private DependencyChecker()
37 {
38 // unused
39 }
40
41 /**
42 * Displaytag requires commons-lang 2.x or better; it is not compatible with earlier versions.
43 * @throws JspTagException if the wrong library, or no library at all, is found.
44 */
45 public static void check() throws JspTagException
46 {
47 if (commonsLangChecked)
48 {
49 return;
50 }
51 try
52 {
53 // Do they have commons lang ?
54 Class stringUtils = Class.forName("org.apache.commons.lang.StringUtils"); //$NON-NLS-1$
55 try
56 {
57 // this method is new in commons-lang 2.1
58 stringUtils.getMethod("splitPreserveAllTokens", new Class[]{String.class}); //$NON-NLS-1$
59 }
60 catch (NoSuchMethodException ee)
61 {
62 throw new JspTagException(Messages.getString("DependencyChecker.lib.incompatible", //$NON-NLS-1$
63 new Object[]{"commons-lang", "2.1", "http://jakarta.apache.org/commons/lang"} //$NON-NLS-1$ //$NON-NLS-1$
64 ));
65 }
66 }
67 catch (ClassNotFoundException e)
68 {
69 throw new JspTagException(Messages.getString("DependencyChecker.lib.missing", //$NON-NLS-1$
70 new Object[]{"commons-lang", "2.1", "http://jakarta.apache.org/commons/lang"} //$NON-NLS-1$ //$NON-NLS-1$
71 ));
72 }
73 commonsLangChecked = true;
74 }
75
76 }