Author: jochen
Date: Thu Aug 18 14:34:47 2005
New Revision: 233384

URL: http://svn.apache.org/viewcvs?rev=233384&view=rev
Log:
Added support for xs:pattern.

Added:
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/Java5REHandler.java
    webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/REFactory.java
    webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/REHandler.java
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/XercesREHandler.java
Modified:
    webservices/jaxme/trunk/.classpath
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/AtomicTypeSG.java
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/SimpleTypeSG.java
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/AtomicTypeSGImpl.java
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/HandlerSGImpl.java
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/ListTypeSGImpl.java
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/SimpleTypeSGImpl.java
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/StringSG.java
    
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/PassThroughXMLWriter.java
    webservices/jaxme/trunk/src/test/jaxb/types.xsd
    webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/XSAtomicType.java
    
webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/impl/XSAtomicTypeRestrictionImpl.java
    
webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/types/AbstractAtomicType.java

Modified: webservices/jaxme/trunk/.classpath
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/.classpath?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- webservices/jaxme/trunk/.classpath (original)
+++ webservices/jaxme/trunk/.classpath Thu Aug 18 14:34:47 2005
@@ -19,5 +19,6 @@
        <classpathentry kind="src" path="src/webapp/java"/>
        <classpathentry exported="true" kind="lib" 
path="prerequisites/servlet.jar"/>
        <classpathentry exported="true" kind="lib" 
path="prerequisites/antlr.jar"/>
+       <classpathentry kind="lib" path="prerequisites/xercesImpl.jar"/>
        <classpathentry kind="output" path="bin"/>
 </classpath>

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/AtomicTypeSG.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/AtomicTypeSG.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/AtomicTypeSG.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/AtomicTypeSG.java
 Thu Aug 18 14:34:47 2005
@@ -56,4 +56,8 @@
    * is not set.</p>
    */
   public Long getTotalDigits();
+    /** Returns the values of the "pattern" facets. Null,
+     * if the facet is not set.
+     */
+       public String[] getPatterns();
 }

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/SimpleTypeSG.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/SimpleTypeSG.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/SimpleTypeSG.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/SimpleTypeSG.java
 Thu Aug 18 14:34:47 2005
@@ -156,6 +156,11 @@
    */
   public void addValidation(JavaMethod pMethod, DirectAccessible pValue) 
throws SAXException;
 
+       /** Adds code for validating the value <code>pValue</code> within the
+        * handler.
+        */
+       public void addHandlerValidation(JavaMethod pJm, TypedValue pValue) 
throws SAXException;
+
        /** Returns, whether the simple type is an instance of
         * <code>xs:id</code>.
         */

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/AtomicTypeSGImpl.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/AtomicTypeSGImpl.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/AtomicTypeSGImpl.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/AtomicTypeSGImpl.java
 Thu Aug 18 14:34:47 2005
@@ -23,30 +23,34 @@
  * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
  */
 public class AtomicTypeSGImpl implements AtomicTypeSG {
-  private final String maxExclusive, maxInclusive;
-  private final String minExclusive, minInclusive;
-  private final Long fractionDigits, totalDigits;
-  private final Long length, maxLength, minLength;
+       private final String maxExclusive, maxInclusive;
+       private final String minExclusive, minInclusive;
+       private final Long fractionDigits, totalDigits;
+       private final Long length, maxLength, minLength;
+       private final String[] patterns;
 
-  public AtomicTypeSGImpl(XSAtomicType xsAtomicType) {
-    maxExclusive = xsAtomicType.getMaxExclusive();
-    maxInclusive = xsAtomicType.getMaxInclusive();
-    minExclusive = xsAtomicType.getMinExclusive();
-    minInclusive = xsAtomicType.getMinInclusive();
-    fractionDigits = xsAtomicType.getFractionDigits();
-    totalDigits = xsAtomicType.getTotalDigits();
-    length = xsAtomicType.getLength();
-    maxLength = xsAtomicType.getMaxLength();
-    minLength = xsAtomicType.getMinLength();
-  }
+       public AtomicTypeSGImpl(XSAtomicType xsAtomicType) {
+               maxExclusive = xsAtomicType.getMaxExclusive();
+               maxInclusive = xsAtomicType.getMaxInclusive();
+               minExclusive = xsAtomicType.getMinExclusive();
+               minInclusive = xsAtomicType.getMinInclusive();
+               fractionDigits = xsAtomicType.getFractionDigits();
+               totalDigits = xsAtomicType.getTotalDigits();
+               length = xsAtomicType.getLength();
+               maxLength = xsAtomicType.getMaxLength();
+               minLength = xsAtomicType.getMinLength();
+               String[] myPatterns = xsAtomicType.getPatterns();
+               patterns = (myPatterns == null  ||  myPatterns.length == 0) ? 
null : myPatterns;
+       }
 
-  public String getMaxExclusive() { return maxExclusive; }
-  public String getMaxInclusive() { return maxInclusive; }
-  public String getMinExclusive() { return minExclusive; }
-  public String getMinInclusive() { return minInclusive; }
-  public Long getFractionDigits() { return fractionDigits; }
-  public Long getTotalDigits() { return totalDigits; }
-  public Long getLength() { return length; }
-  public Long getMaxLength() { return maxLength; }
-  public Long getMinLength() { return minLength; }
+       public String getMaxExclusive() { return maxExclusive; }
+       public String getMaxInclusive() { return maxInclusive; }
+       public String getMinExclusive() { return minExclusive; }
+       public String getMinInclusive() { return minInclusive; }
+       public Long getFractionDigits() { return fractionDigits; }
+       public Long getTotalDigits() { return totalDigits; }
+       public Long getLength() { return length; }
+       public Long getMaxLength() { return maxLength; }
+       public Long getMinLength() { return minLength; }
+       public String[] getPatterns() { return patterns; }
 }

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/HandlerSGImpl.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/HandlerSGImpl.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/HandlerSGImpl.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/HandlerSGImpl.java
 Thu Aug 18 14:34:47 2005
@@ -39,7 +39,6 @@
 import org.apache.ws.jaxme.js.Parameter;
 import org.apache.ws.jaxme.js.TypedValue;
 import org.apache.ws.jaxme.js.impl.TypedValueImpl;
-import org.apache.ws.jaxme.xs.xml.XsQName;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -286,14 +285,17 @@
                        pJm.addTry();
                }
                Object s = new Object[]{"(", StringSG.STRING_TYPE, ") ", 
pValue};
+               pType.getSimpleTypeSG().addHandlerValidation(pJm, pValue);
                TypedValue result = new 
TypedValueImpl(pType.getSimpleTypeSG().getCastFromString(pJm, s, 
"getHandler()"),
                                                                                
           pType.getSimpleTypeSG().getRuntimeType());
                pPropertySG.addValue(pJm, pElement, result, null);
                if (causingParseConversionEvent) {
                        DirectAccessible e = pJm.addCatch(Exception.class);
                        pJm.addLine("getHandler().parseConversionEvent(",
-                                               JavaSource.getQuoted("Failed to 
convert value of " + pName + ": "),
-                                               " + ", pValue, ", ", e, ");");
+                                               JavaSource.getQuoted("Failed to 
convert value "),
+                                               " + ", pValue, " + ",
+                                               JavaSource.getQuoted(" for " +  
pName + ": "),
+                                               " + ", e, ".getMessage(), ", e, 
");");
                        pJm.addEndTry();
                }
        }

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/ListTypeSGImpl.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/ListTypeSGImpl.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/ListTypeSGImpl.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/ListTypeSGImpl.java
 Thu Aug 18 14:34:47 2005
@@ -198,4 +198,8 @@
     public boolean isCausingParseConversionEvent(SimpleTypeSG pController) {
                return 
itemType.getSimpleTypeSG().isCausingParseConversionEvent();
        }
+
+       public void addHandlerValidation(SimpleTypeSG pController, JavaMethod 
pJm, TypedValue pValue) throws SAXException {
+               itemType.getSimpleTypeSG().addHandlerValidation(pJm, pValue);
+       }
 }

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/SimpleTypeSGImpl.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/SimpleTypeSGImpl.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/SimpleTypeSGImpl.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/SimpleTypeSGImpl.java
 Thu Aug 18 14:34:47 2005
@@ -29,6 +29,7 @@
 import org.apache.ws.jaxme.js.JavaMethod;
 import org.apache.ws.jaxme.js.JavaQNameImpl;
 import org.apache.ws.jaxme.js.JavaSource;
+import org.apache.ws.jaxme.js.TypedValue;
 import org.apache.ws.jaxme.xs.XSType;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -128,4 +129,8 @@
 
   public void addValidation(SimpleTypeSG pController, JavaMethod pMethod, 
DirectAccessible pValue) throws SAXException {
   }
+
+       public void addHandlerValidation(SimpleTypeSG pController, JavaMethod 
pJm, TypedValue pValue)
+                       throws SAXException {
+       }
 }

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/StringSG.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/StringSG.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/StringSG.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/generator/types/StringSG.java
 Thu Aug 18 14:34:47 2005
@@ -21,7 +21,10 @@
 import org.apache.ws.jaxme.generator.sg.SGlet;
 import org.apache.ws.jaxme.generator.sg.SchemaSG;
 import org.apache.ws.jaxme.generator.sg.SimpleTypeSG;
+import org.apache.ws.jaxme.impl.REFactory;
+import org.apache.ws.jaxme.impl.REHandler;
 import org.apache.ws.jaxme.js.DirectAccessible;
+import org.apache.ws.jaxme.js.JavaField;
 import org.apache.ws.jaxme.js.JavaMethod;
 import org.apache.ws.jaxme.js.JavaQName;
 import org.apache.ws.jaxme.js.JavaQNameImpl;
@@ -83,7 +86,36 @@
                 */
                return atomicType.getLength() != null
                   ||  atomicType.getMinLength() != null
-                  ||  atomicType.getMaxLength() != null;
+                  ||  atomicType.getMaxLength() != null
+                  ||  atomicType.getPatterns() != null;
+       }
+
+       public void addHandlerValidation(SimpleTypeSG pController, JavaMethod 
pJm, TypedValue pValue)
+                       throws SAXException {
+               String[] patterns = pController.getAtomicType().getPatterns();
+               if (patterns == null) {
+                       return;
+               }
+               JavaSource js = pJm.getJavaSource();
+               int i = 0;
+               for (;;) {
+                       String name = "_re_" + i;
+                       JavaField jf = js.getField(name);
+                       if (jf == null) {
+                               break;
+                       }
+               }
+               for (int j = 0;  j < patterns.length;  j++) {
+                       String name = "_re_" + i++;
+                       JavaField jf = js.newJavaField(name, 
REHandler.Matcher.class);
+                       jf.addLine(REFactory.class, 
".getREHandler().getMatcher(",
+                                          JavaSource.getQuoted(patterns[j]), 
")");
+                       pJm.addIf("!", jf, ".matches(", pValue, ")");
+                       pJm.addThrowNew(IllegalArgumentException.class,
+                                                       
JavaSource.getQuoted("Value doesn't match pattern "),
+                                                               " + ", jf, 
".getPattern()");
+                       pJm.addEndIf();
+               }
        }
 
     public void addValidation(SimpleTypeSG pController, JavaMethod pMethod, 
DirectAccessible pValue)

Added: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/Java5REHandler.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/Java5REHandler.java?rev=233384&view=auto
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/Java5REHandler.java 
(added)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/Java5REHandler.java 
Thu Aug 18 14:34:47 2005
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2003, 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ws.jaxme.impl;
+
+import com.sun.org.apache.xerces.internal.impl.xpath.regex.RegularExpression;
+
+
+/** Default implementation of [EMAIL PROTECTED] REHandler}, using
+ * the builtin Xerces from Java 5.
+ */
+public class Java5REHandler implements REHandler {
+       public Matcher getMatcher(final String pPattern) {
+               final RegularExpression re = new RegularExpression(pPattern, 
"X");
+               return new Matcher(){
+                       public String getPattern() { return pPattern; }
+                       public synchronized boolean matches(String pValue) {
+                               return re.matches(pValue);
+                       }
+               };
+       }
+}

Modified: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/PassThroughXMLWriter.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/PassThroughXMLWriter.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/PassThroughXMLWriter.java
 (original)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/PassThroughXMLWriter.java
 Thu Aug 18 14:34:47 2005
@@ -12,7 +12,6 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
-
  */
 package org.apache.ws.jaxme.impl;
 

Added: webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/REFactory.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/REFactory.java?rev=233384&view=auto
==============================================================================
--- webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/REFactory.java 
(added)
+++ webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/REFactory.java 
Thu Aug 18 14:34:47 2005
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2003, 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ws.jaxme.impl;
+
+
+/** The REFactory is used for creating instances of
+ * [EMAIL PROTECTED] REHandler.Matcher}. It provides access to a single
+ * instance of [EMAIL PROTECTED] REHandler}.
+ */
+public class REFactory {
+       private static final REHandler reHandler;
+
+       static {
+               REHandler reh = null;
+               String p = System.getProperty(REFactory.class.getName() + 
".Implementation");
+               if (p != null) {
+                       try {
+                               Class c = Class.forName(p);
+                               reh = (REHandler) c.newInstance();
+                       } catch (Throwable t) {
+                       }
+               }
+               if (p == null) {
+                       p = REFactory.class.getName();
+                       p = p.substring(0, p.lastIndexOf('.')+1);
+                       try {
+                               Class c = Class.forName(p + "Java5REHandler");
+                               reh = (REHandler) c.newInstance();
+                       } catch (Throwable t1) {
+                               try {
+                                       Class c = Class.forName(p + 
"XercerREHandler");
+                                       reh = (REHandler) c.newInstance();
+                               } catch (Throwable t2) {
+                                       reh = new DummyREHandler();
+                               }
+                       }
+               }
+               reHandler = reh;
+       }
+
+       /** Returns the singleton [EMAIL PROTECTED] REHandler}. The instance is
+        * created as follows:
+        * <ol>
+        *   <li>If the system property
+        *     <code>org.apache.ws.jaxme.impl.REFactory.Implementation</code>
+        *     is set, and contains the name of a valid REHandler class,
+        *     then that class is instantiated.</li>
+        *   <li>An instance of [EMAIL PROTECTED] Java5REHandler} is created,
+        *     if possible. This is the case, when running under
+        *     Java 5.</li>
+        *   <li>Otherwise, an instance of [EMAIL PROTECTED] XercesREHandler}
+        *     is created, if possible. This is the case, when
+        *     Xerces-J is available.</li>
+        *   <li>Otherwise, an instance of [EMAIL PROTECTED] DummyREHandler}
+        *     is created. This is an REHandler, which matches
+        *     always. In other words, patterns are ignored.</li>
+        * </ol>
+        */
+       public static REHandler getREHandler() { return reHandler; }
+       
+       private static class DummyREHandler implements REHandler {
+               public Matcher getMatcher(final String pPattern) {
+                       return new REHandler.Matcher() {
+                               public String getPattern() { return pPattern; }
+                               public boolean matches(String pValue) { return 
true; }
+                       };
+               }
+       }
+}

Added: webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/REHandler.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/REHandler.java?rev=233384&view=auto
==============================================================================
--- webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/REHandler.java 
(added)
+++ webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/REHandler.java 
Thu Aug 18 14:34:47 2005
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2003, 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ws.jaxme.impl;
+
+/** An instance of RE is able to evaluate, whether
+ * a given regular expression is matched by a
+ * certain string.<br>
+ * JaxMe doesn't actually implement RE handling. It supports
+ * a set of implementations, basically Xerces and Java 5.
+ * Upon startup, an attempt is made to load an RE implementation.
+ */
+public interface REHandler {
+       /** An RE matcher is a compiled regular expression.
+        * Its method
+        */
+       public interface Matcher {
+               /** Returns the regular expressions pattern.
+                */
+               String getPattern();
+               /** Returns, whether the given string is matched
+                * by the regular expression.
+                */
+               boolean matches(String pValue);
+       }
+
+       /** Creates a thread safe RE matcher.
+        */
+       Matcher getMatcher(String pPattern);
+}

Added: 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/XercesREHandler.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/XercesREHandler.java?rev=233384&view=auto
==============================================================================
--- 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/XercesREHandler.java 
(added)
+++ 
webservices/jaxme/trunk/src/jaxme/org/apache/ws/jaxme/impl/XercesREHandler.java 
Thu Aug 18 14:34:47 2005
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2003, 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ws.jaxme.impl;
+
+import org.apache.xerces.impl.xpath.regex.RegularExpression;
+
+
+/** Default implementation of [EMAIL PROTECTED] REHandler}, using
+ * the builtin Xerces from Java 5.
+ */
+public class XercesREHandler implements REHandler {
+       public Matcher getMatcher(final String pPattern) {
+               final RegularExpression re = new RegularExpression(pPattern, 
"X");
+               return new Matcher(){
+                       public String getPattern() { return pPattern; }
+                       public synchronized boolean matches(String pValue) {
+                               return re.matches(pValue);
+                       }
+               };
+       }
+}

Modified: webservices/jaxme/trunk/src/test/jaxb/types.xsd
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/test/jaxb/types.xsd?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
Binary files - no diff available.

Modified: 
webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/XSAtomicType.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/XSAtomicType.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/XSAtomicType.java 
(original)
+++ webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/XSAtomicType.java Thu 
Aug 18 14:34:47 2005
@@ -68,4 +68,8 @@
    * replacing.</p>
    */
   public boolean isCollapsing();
+
+       /** Returns the patterns, which are restricting this type.
+        */
+    public String[] getPatterns();
 }

Modified: 
webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/impl/XSAtomicTypeRestrictionImpl.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/impl/XSAtomicTypeRestrictionImpl.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/impl/XSAtomicTypeRestrictionImpl.java
 (original)
+++ 
webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/impl/XSAtomicTypeRestrictionImpl.java
 Thu Aug 18 14:34:47 2005
@@ -26,6 +26,7 @@
 import org.apache.ws.jaxme.xs.xml.XsEMinExclusive;
 import org.apache.ws.jaxme.xs.xml.XsEMinInclusive;
 import org.apache.ws.jaxme.xs.xml.XsEMinLength;
+import org.apache.ws.jaxme.xs.xml.XsEPattern;
 import org.apache.ws.jaxme.xs.xml.XsETotalDigits;
 import org.apache.ws.jaxme.xs.xml.XsEWhiteSpace;
 import org.apache.ws.jaxme.xs.xml.XsGSimpleRestrictionModel;
@@ -35,7 +36,8 @@
  * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
  */
 public class XSAtomicTypeRestrictionImpl extends XSSimpleTypeRestrictionImpl 
implements XSAtomicType {
-  private final XSAtomicType atomicBaseType;
+       private static final String[] ZERO_PATTERNS = new String[0];
+       private final XSAtomicType atomicBaseType;
 
   /** Creates a new atomic type restricting <code>pBaseType</code>
    * with the constraints <code>pRestriction</code>.
@@ -150,5 +152,18 @@
     } else {
       return whiteSpace.isCollapsing();
     }
+  }
+
+  public String[] getPatterns() {
+         XsEPattern[] patterns = getRestriction().getPatterns();
+         if (patterns == null  ||  patterns.length == 0) {
+                 return ZERO_PATTERNS;
+         } else {
+                 String[] result = new String[patterns.length];
+                 for (int i = 0;  i < patterns.length;  i++) {
+                         result[i] = patterns[i].getValue();
+                 }
+                 return result;
+         }
   }
 }

Modified: 
webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/types/AbstractAtomicType.java
URL: 
http://svn.apache.org/viewcvs/webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/types/AbstractAtomicType.java?rev=233384&r1=233383&r2=233384&view=diff
==============================================================================
--- 
webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/types/AbstractAtomicType.java
 (original)
+++ 
webservices/jaxme/trunk/src/xs/org/apache/ws/jaxme/xs/types/AbstractAtomicType.java
 Thu Aug 18 14:34:47 2005
@@ -23,7 +23,8 @@
  * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
  */
 public abstract class AbstractAtomicType extends AbstractSimpleType implements 
XSAtomicType {
-  public boolean isAtomic() { return true; }
+       private static final String[] ZERO_PATTERNS = new String[0];
+       public boolean isAtomic() { return true; }
 
   public XSAtomicType getAtomicType() { return this; }
 
@@ -39,4 +40,5 @@
   public boolean isReplacing() { return false; }
   public boolean isCollapsing() { return false; }
   public boolean isBuiltin() { return true; }
+       public String[] getPatterns() { return ZERO_PATTERNS; }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to