View Javadoc
1   /**
2    * Redistribution and use of this software and associated documentation
3    * ("Software"), with or without modification, are permitted provided
4    * that the following conditions are met:
5    *
6    * 1. Redistributions of source code must retain copyright
7    *    statements and notices.  Redistributions must also contain a
8    *    copy of this document.
9    *
10   * 2. Redistributions in binary form must reproduce the
11   *    above copyright notice, this list of conditions and the
12   *    following disclaimer in the documentation and/or other
13   *    materials provided with the distribution.
14   *
15   * 3. The name "Exolab" must not be used to endorse or promote
16   *    products derived from this Software without prior written
17   *    permission of Intalio, Inc.  For written permission,
18   *    please contact info@exolab.org.
19   *
20   * 4. Products derived from this Software may not be called "Exolab"
21   *    nor may "Exolab" appear in their names without prior written
22   *    permission of Intalio, Inc. Exolab is a registered
23   *    trademark of Intalio, Inc.
24   *
25   * 5. Due credit should be given to the Exolab Project
26   *    (http://www.exolab.org/).
27   *
28   * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS
29   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
32   * INTALIO, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39   * OF THE POSSIBILITY OF SUCH DAMAGE.
40   *
41   * Copyright 2000-2002 (C) Intalio, Inc. All Rights Reserved.
42   *
43   * $Id$
44   */
45  
46   package org.exolab.castor.util;
47  
48   import org.apache.oro.text.regex.*;
49   
50   /**
51    * An implementation of the RegExpEvaluator that uses the
52    * Jakarta ORO Regular Expression library. For more information
53    * about the Jakarta ORO library please visit:
54    * <a href="http://jakarta.apache.org/oro/">
55    * http://jakarta.apache.org/oro/</a>;
56    *
57    * @author <a href="mailto:glenn@voyager.apg.more.net">Glenn Nielsen</a>
58    * @author <a href="mailto:kvisco@intalio.com">Keith Visco</a>
59    * @version $Revision$ $Date: 2003-03-03 00:05:44 -0700 (Mon, 03 Mar 2003) $
60   **/
61   public class JakartaOroEvaluator 
62      implements RegExpEvaluator
63  {
64      
65      private static final String BOL = "^";
66      private static final String EOL = "$";
67      
68      /**
69       * The Regular expression
70      **/
71      private Perl5Pattern _regexp = null;
72      
73      /**
74       * Sets the regular expression to match against during
75       * a call to #matches
76       *
77       * @param rexpr the regular expression
78      **/
79      public void setExpression(String rexpr) {
80          
81          if (rexpr != null) {
82              try {
83                  //-- patch and compile expression
84                  Perl5Compiler compiler = new Perl5Compiler();
85                  _regexp = (Perl5Pattern) compiler.compile(BOL + rexpr + EOL,
86                      Perl5Compiler.SINGLELINE_MASK);
87              }
88              catch(MalformedPatternException ex) {
89                  String err = "RegExp Syntax error: ";
90                  err += ex.getMessage();
91                  err += " ; error occured with the following "+
92                      "regular expression: " + rexpr;
93                  
94                  throw new IllegalArgumentException(err);
95              }
96          }
97          else
98              _regexp = null;
99      } //-- setExpression
100     
101     /**
102      * Returns true if the given String is matched by the 
103      * regular expression of this RegExpEvaluator
104      *
105      * @param value the String to check the production of
106      * @return true if the given string matches the regular
107      * expression of this RegExpEvaluator
108      * @see #setExpression
109     **/
110     public boolean matches(String value)
111     {
112         // object to match compiled regular expressions
113         Perl5Matcher matcher = new Perl5Matcher();
114         // class for accessing results of pattern match
115         return matcher.contains(value,_regexp);
116     } //-- matches
117     
118  } //-- JakartaOroEvaluator
119  
120  
121