### Eclipse Workspace Patch 1.0 #P jaxme2 Index: jaxme-jm/src/main/java/org/apache/ws/jaxme/generator/types/StringSG.java =================================================================== --- jaxme-jm/src/main/java/org/apache/ws/jaxme/generator/types/StringSG.java (revision 781993) +++ jaxme-jm/src/main/java/org/apache/ws/jaxme/generator/types/StringSG.java (working copy) @@ -16,6 +16,9 @@ */ package org.apache.ws.jaxme.generator.types; +import java.util.ArrayList; +import java.util.List; + import org.apache.ws.jaxme.generator.sg.AtomicTypeSG; import org.apache.ws.jaxme.generator.sg.SGFactory; import org.apache.ws.jaxme.generator.sg.SGlet; @@ -104,7 +107,8 @@ return; } JavaSource js = pJm.getJavaSource(); - + + final List expr = new ArrayList(); for (int j = 0; j < patterns.length; j++) { String name = newReFieldName(js); JavaField jf = js.newJavaField(name, REHandler.Matcher.class, JavaSource.PRIVATE); @@ -112,12 +116,34 @@ jf.setFinal(true); jf.addLine(REFactory.class, ".getREHandler().getMatcher(", JavaSource.getQuoted(patterns[j]), ")"); - pJm.addIf("!", jf, ".matches(", pStringValue, ")"); - pJm.addThrowNew(IllegalArgumentException.class, - JavaSource.getQuoted("Value doesn't match pattern "), - " + ", jf, ".getPattern()"); - pJm.addEndIf(); + if (!expr.isEmpty()) { + expr.add(" && "); + } + expr.add("!"); + expr.add(jf); + expr.add(".matches("); + expr.add(pStringValue); + expr.add(")"); } + pJm.addIf(expr.toArray()); + if (patterns.length > 1) { + List msg = new ArrayList(); + msg.add(JavaSource.getQuoted("Value doesn't match any of the patterns ")); + for (int i = 0; i < patterns.length; i++) { + if (i > 0) { + msg.add(" + "); + msg.add(JavaSource.getQuoted(", ")); + } + msg.add(" + "); + msg.add(JavaSource.getQuoted(patterns[i])); + } + pJm.addThrowNew(IllegalArgumentException.class, msg.toArray()); + } else { + pJm.addThrowNew(IllegalArgumentException.class, + JavaSource.getQuoted("Value doesn't match pattern "), + " + ", JavaSource.getQuoted(patterns[0])); + } + pJm.addEndIf(); } public void addValidation(SimpleTypeSG pController, JavaMethod pMethod, DirectAccessible pValue)