Author: mukulg
Date: Sat Feb 12 01:18:28 2011
New Revision: 1070002

URL: http://svn.apache.org/viewvc?rev=1070002&view=rev
Log:
reverting changes made for JIRA issue XERCESJ-1496 (i.e rolling back changes 
made during SVN revision 1069296) as per discussions on xerces-dev list. 
keeping the status quo of functionality untill further agreement.

Modified:
    xerces/java/branches/xml-schema-1.1-dev/samples/jaxp/SourceValidator.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathImpl.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/XMLSchemaValidatorComponentManager.java

Modified: 
xerces/java/branches/xml-schema-1.1-dev/samples/jaxp/SourceValidator.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/samples/jaxp/SourceValidator.java?rev=1070002&r1=1070001&r2=1070002&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/samples/jaxp/SourceValidator.java 
(original)
+++ xerces/java/branches/xml-schema-1.1-dev/samples/jaxp/SourceValidator.java 
Sat Feb 12 01:18:28 2011
@@ -88,9 +88,6 @@ public class SourceValidator 
     /** Generate synthetic schema annotations feature id 
(http://apache.org/xml/features/generate-synthetic-annotations). */
     protected static final String GENERATE_SYNTHETIC_ANNOTATIONS_ID = 
"http://apache.org/xml/features/generate-synthetic-annotations";;
     
-    /** Enable/prohibit XML Schema 1.1 assertion evaluations on each 
simpleType list item */
-    protected static final String SIMPLETYPE_FOLDEDLIST_ASSERTION_FEATURE = 
"http://apache.org/xml/features/validation/foldedSTlist-assertion-evaluation";;
-    
     // property ids
     
     /** StAX support for reporting line and column numbers property id 
(javax.xml.stream.isSupportingLocationCoordinates). */
@@ -122,9 +119,6 @@ public class SourceValidator 
     /** Default generate synthetic schema annotations (false). */
     protected static final boolean DEFAULT_GENERATE_SYNTHETIC_ANNOTATIONS = 
false;
     
-    /** Default XML Schema 1.1 simpleType folded list assertion evaluation 
(false). */
-    protected static final boolean 
DEFAULT_SIMPLETYPE_FOLDEDLIST_ASSERTION_EVALUATION = false;
-    
     /** Default memory usage report (false). */
     protected static final boolean DEFAULT_MEMORY_USAGE = false;
     
@@ -316,7 +310,6 @@ public class SourceValidator 
         boolean honourAllSchemaLocations = DEFAULT_HONOUR_ALL_SCHEMA_LOCATIONS;
         boolean validateAnnotations = DEFAULT_VALIDATE_ANNOTATIONS;
         boolean generateSyntheticAnnotations = 
DEFAULT_GENERATE_SYNTHETIC_ANNOTATIONS;
-        boolean simpleTypeFoldedListAssertionEvaluation =  
DEFAULT_SIMPLETYPE_FOLDEDLIST_ASSERTION_EVALUATION;
         boolean memoryUsage = DEFAULT_MEMORY_USAGE;
         
         // process arguments
@@ -410,10 +403,6 @@ public class SourceValidator 
                     memoryUsage = option.equals("m");
                     continue;
                 }
-                if (option.equalsIgnoreCase("fL11")) {
-                    simpleTypeFoldedListAssertionEvaluation = 
option.equals("fL11");
-                    continue;
-                }
                 if (option.equals("h")) {
                     printUsage();
                     continue;
@@ -522,15 +511,6 @@ public class SourceValidator 
             catch (SAXNotSupportedException e) {
                 System.err.println("warning: Validator does not support 
feature ("+GENERATE_SYNTHETIC_ANNOTATIONS_ID+")");
             }
-            try {
-                validator.setFeature(SIMPLETYPE_FOLDEDLIST_ASSERTION_FEATURE, 
simpleTypeFoldedListAssertionEvaluation);
-            }
-            catch (SAXNotRecognizedException e) {
-                System.err.println("warning: Validator does not recognize 
feature ("+SIMPLETYPE_FOLDEDLIST_ASSERTION_FEATURE+")");
-            }
-            catch (SAXNotSupportedException e) {
-                System.err.println("warning: Validator does not support 
feature ("+SIMPLETYPE_FOLDEDLIST_ASSERTION_FEATURE+")");
-            }
 
             // Validate instance documents
             if (instances != null && instances.size() > 0) {
@@ -608,24 +588,22 @@ public class SourceValidator 
         System.err.println();
         
         System.err.println("options:");
-        System.err.println("  -l name         Select schema language by 
name.");
-        System.err.println("  -x number       Select number of repetitions.");
-        System.err.println("  -a uri ...      Provide a list of schema 
documents");
-        System.err.println("  -i uri ...      Provide a list of instance 
documents to validate");
-        System.err.println("  -vs source      Select validation source 
(sax|dom|stax|stream)");
-        System.err.println("  -f    | -F      Turn on/off Schema full 
checking.");
-        System.err.println("                  NOTE: Not supported by all 
schema factories and validators.");
-        System.err.println("  -hs   | -HS     Turn on/off honouring of all 
schema locations.");
-        System.err.println("                  NOTE: Not supported by all 
schema factories and validators.");
-        System.err.println("  -va   | -VA     Turn on/off validation of schema 
annotations.");
-        System.err.println("                  NOTE: Not supported by all 
schema factories and validators.");
-        System.err.println("  -ga   | -GA     Turn on/off generation of 
synthetic schema annotations.");
-        System.err.println("                  NOTE: Not supported by all 
schema factories and validators.");        
-        System.err.println("  -m    | -M      Turn on/off memory usage 
report");
-        System.err.println("  -xsd11          Turn on XSD 1.1 support.");
-        System.err.println("  -fL11           Turn on/off simpleType folded 
list XSD 1.1 assertion evaluation mode.");
-        System.err.println("                  NOTE: Not supported by all 
schema factories and validators.");
-        System.err.println("  -h              This help screen.");
+        System.err.println("  -l name     Select schema language by name.");
+        System.err.println("  -x number   Select number of repetitions.");
+        System.err.println("  -a uri ...  Provide a list of schema documents");
+        System.err.println("  -i uri ...  Provide a list of instance documents 
to validate");
+        System.err.println("  -vs source  Select validation source 
(sax|dom|stax|stream)");
+        System.err.println("  -f  | -F    Turn on/off Schema full checking.");
+        System.err.println("              NOTE: Not supported by all schema 
factories and validators.");
+        System.err.println("  -hs | -HS   Turn on/off honouring of all schema 
locations.");
+        System.err.println("              NOTE: Not supported by all schema 
factories and validators.");
+        System.err.println("  -va | -VA   Turn on/off validation of schema 
annotations.");
+        System.err.println("              NOTE: Not supported by all schema 
factories and validators.");
+        System.err.println("  -ga | -GA   Turn on/off generation of synthetic 
schema annotations.");
+        System.err.println("              NOTE: Not supported by all schema 
factories and validators.");
+        System.err.println("  -m  | -M    Turn on/off memory usage report");
+        System.err.println("  -xsd11      Turn on XSD 1.1 support.");
+        System.err.println("  -h          This help screen.");
         
         System.err.println();
         System.err.println("defaults:");
@@ -640,8 +618,6 @@ public class SourceValidator 
         System.err.println(DEFAULT_VALIDATE_ANNOTATIONS ? "on" : "off");
         System.err.print("  Generate synthetic annotations:  ");
         System.err.println(DEFAULT_GENERATE_SYNTHETIC_ANNOTATIONS ? "on" : 
"off");
-        System.err.print("  Simple Type folded list XSD 1.1 assertion 
evaluation:  ");
-        System.err.println(DEFAULT_SIMPLETYPE_FOLDEDLIST_ASSERTION_EVALUATION 
? "true" : "false");
         System.err.print("  Memory:                          ");
         System.err.println(DEFAULT_MEMORY_USAGE ? "on" : "off");
         

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java?rev=1070002&r1=1070001&r2=1070002&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java
 Sat Feb 12 01:18:28 2011
@@ -334,9 +334,6 @@ public final class Constants {
     /** Feature to ignore errors caused by type alternatives */
     public static final String TYPE_ALTERNATIVES_CHEKING_FEATURE = 
"validation/type-alternative-checking";
     
-    /** Feature to enable/prohibit XML Schema 1.1 assertion evaluations on 
each simpleType list item */
-    public static final String SIMPLETYPE_FOLDEDLIST_ASSERTION_FEATURE = 
"validation/foldedSTlist-assertion-evaluation";
-    
     /** Feature to ignore errors caused by unparsed entities 
("validation/unparsed-entity-checking") */
     public static final String UNPARSED_ENTITY_CHECKING_FEATURE = 
"validation/unparsed-entity-checking";
     

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathImpl.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathImpl.java?rev=1070002&r1=1070001&r2=1070002&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathImpl.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLAssertPsychopathImpl.java
 Sat Feb 12 01:18:28 2011
@@ -170,7 +170,8 @@ public class XMLAssertPsychopathImpl ext
 
         List assertionList = (List) augs.getItem("ASSERT");
         
-        // if we have assertions applicable to this element, store the element 
reference and the assertions on it on the runtime stacks.
+        // if we have assertions applicable to this element, store the element 
reference and the assertions on it,
+        // on the runtime stacks.
         if (assertionList != null) {
             fAssertRootStack.push(fCurrentAssertDomNode);
             fAssertListStack.push(assertionList);
@@ -208,7 +209,7 @@ public class XMLAssertPsychopathImpl ext
                  List assertions = (List) fAssertListStack.pop(); 
                  Boolean isAssertProcessingNeeded = (Boolean) 
augs.getItem("ASSERT_PROC_NEEDED_FOR_UNION");
                  if (isAssertProcessingNeeded.booleanValue()) {
-                    // if in a pre-processing step in XMLSchemaValidator a 
member type of union in XML Schema namespace successfully 
+                    // if in a pre-processing step in XMLSchemaValidator, a 
member type of union in XML Schema namespace successfully 
                     // validated an atomic value, we don't process assertions 
on such union types. For all other use-cases (non union
                     // simple types or complex types, applicable assertions 
would always be processed.
                     processAllAssertionsOnElement(element, assertions, 
elemPSVI);
@@ -225,7 +226,7 @@ public class XMLAssertPsychopathImpl ext
 
     /*
      * Method to evaluate all of XML schema 1.1 assertions for an element 
tree. This is the root method
-     * which evaluates all XML schema assertions in an XML instance validation 
episode.
+     * which evaluates all XML schema assertions, in a single XML instance 
validation episode.
      */
     private void processAllAssertionsOnElement(QName element, List assertions, 
ElementPSVI elemPSVI) throws Exception {
          
@@ -255,7 +256,7 @@ public class XMLAssertPsychopathImpl ext
         
         int textChildCount = 0;        
         // we are only interested in text & element nodes. Store count of them 
in this variable.
-        int effectiveChildNodeCount = 0;
+        int effectiveChildCount = 0;
         
         // there could be adjacent text nodes in a DOM tree. merge them to get 
the value.
         NodeList childList = fCurrentAssertDomNode.getChildNodes();
@@ -266,35 +267,35 @@ public class XMLAssertPsychopathImpl ext
             short nodeType = node.getNodeType();
             if (nodeType == Node.TEXT_NODE) {
                 textChildCount++;
-                effectiveChildNodeCount++;
+                effectiveChildCount++;
                 textValueContents.append(node.getNodeValue());
             }
             else if (nodeType == Node.ELEMENT_NODE) {
-                effectiveChildNodeCount++;  
+                effectiveChildCount++;  
             }
         }
         
-        String strValue = "";
+        String value = "";
         
-        if (textChildCount == effectiveChildNodeCount) {
+        if (textChildCount == effectiveChildCount) {
             // the DOM tree we are inspecting has simple content. therefore we 
can find the desired string value. 
             XSElementDeclaration elemDecl = pElemPSVI.getElementDeclaration();
             if 
((elemDecl.getTypeDefinition()).derivedFrom(SchemaSymbols.URI_SCHEMAFORSCHEMA, 
SchemaSymbols.ATTVAL_STRING, XSConstants.DERIVATION_RESTRICTION)) {
                 // if element's schema type is derived by restriction from 
xs:string, white-space normalization is not needed for the
                 // string value for context variable $value.
-                strValue = textValueContents.toString();  
+                value = textValueContents.toString();  
             }
             else {
                 // white-space normalization is needed for the string value of 
$value in case of derivation from non xs:string atomic types.
-                strValue = XMLChar.trim(textValueContents.toString());
+                value = XMLChar.trim(textValueContents.toString());
             }    
         }
         else {
-            // the DOM tree we are inspecting has 'element only/mixed' content.
-            strValue = null; 
+            // the DOM tree we are inspecting, has 'mixed/element only' 
content.
+            value = null; 
         }
         
-        return strValue;
+        return value;
         
     } // getStringValueOf$Value
 
@@ -306,10 +307,11 @@ public class XMLAssertPsychopathImpl ext
         
         if (value != null) {
             // complex type with simple content
-            setTypedValueFor$value(value, null, null, false);
+            setTypedValueFor$value(value, null, null);
         } else {
             // complex type with complex content. set xpath context variable 
$value to an empty sequence.
-            fXpath2DynamicContext.set_variable(new 
org.eclipse.wst.xml.xpath2.processor.internal.types.QName("value"), 
getXPath2ResultSequence(new ArrayList()));
+            fXpath2DynamicContext.set_variable(new 
org.eclipse.wst.xml.xpath2.processor.internal.types.QName(
+                                             "value"), 
getXPath2ResultSequence(new ArrayList()));
         }
         
         XSObjectList assertList = (XSObjectList) assertions;
@@ -334,7 +336,7 @@ public class XMLAssertPsychopathImpl ext
                 final boolean isTypeDerivedFromUnion = ((XSSimpleType) 
attrType.getBaseType()).getVariety() == XSSimpleType.VARIETY_UNION;
                 if (assertImpl.getVariety() == 
XSSimpleTypeDefinition.VARIETY_ATOMIC) {
                     // evaluating assertions for "simpleType -> restriction" 
(not derived by union)
-                    setTypedValueFor$value(value, null, attrType, false);
+                    setTypedValueFor$value(value, null, attrType);
                     AssertionError assertError = evaluateOneAssertion(element, 
assertImpl, value, xpathContextExists, false);
                     if (assertError != null) {
                         reportAssertionsError(assertError);    
@@ -366,7 +368,7 @@ public class XMLAssertPsychopathImpl ext
      */
     private void evaluateAssertionsFromASimpleType(QName element, List 
assertions, String value, ElementPSVI elemPSVI) throws Exception {
         
-        // find the itemType and memberTypes of xs:list and xs:union 
respectively (only one of these would be applicable)        
+        // find the itemType and memberTypes of xs:list and xs:union 
respectively (only one of these will be applicable)        
         XSSimpleTypeDefinition itemType = null;                    
         XSObjectList memberTypes = null;                     
         
@@ -392,7 +394,7 @@ public class XMLAssertPsychopathImpl ext
             }
             if (memberTypes != null && memberTypes.getLength() == 0) {
                 // evaluating assertions for "simpleType -> restriction" (not 
derived by union)
-                setTypedValueFor$value(value, null, null, false);
+                setTypedValueFor$value(value, null, null);
                 AssertionError assertError = evaluateOneAssertion(element, 
assertImpl, value, false, false);
                 if (assertError != null) {
                     reportAssertionsError(assertError);    
@@ -412,35 +414,23 @@ public class XMLAssertPsychopathImpl ext
     
     
     /*
-     * Evaluate assertion on a simpleType xs:list value. Assertion would be 
evaluated on each list item, or only once for the entire
-     * list depending on status of the JAXP validator feature 
http://apache.org/xml/features/validation/foldedSTlist-assertion-evaluation. 
+     * Evaluate assertion on a simpleType xs:list value. Assertion is 
evaluated on each list item.
      */
-    private void evaluateAssertionOnSTListValue(QName element, String 
listStrValue, XSAssertImpl assertImpl, boolean xpathContextExists, 
XSSimpleTypeDefinition itemType) 
-                                                throws Exception {
+    private void evaluateAssertionOnSTListValue(QName element, String 
listStrValue, XSAssertImpl assertImpl, boolean xpathContextExists,
+                                                XSSimpleTypeDefinition 
itemType) throws Exception {
         
-        boolean isFoldedSTListAssertionEvaluation = ((Boolean) 
fAssertParams.get("FOLDED_STLIST_ASSERT_FEATURE")).booleanValue();
+        // tokenize the list value by the longest sequence of white-spaces.
+        StringTokenizer values = new StringTokenizer(listStrValue, " \n\t\r");
         
-        if (isFoldedSTListAssertionEvaluation) {            
-            setValueOf$valueForSTVarietyList(listStrValue, itemType, 
isFoldedSTListAssertionEvaluation);
-            AssertionError assertError = evaluateOneAssertion(element, 
assertImpl, listStrValue, xpathContextExists, true);            
+        // evaluate assertion on all of list items
+        while (values.hasMoreTokens()) {
+            String itemValue = values.nextToken();
+            setValueOf$valueForAListItem(itemValue, itemType);                 
       
+            AssertionError assertError = evaluateOneAssertion(element, 
assertImpl, itemValue, xpathContextExists, true);
             if (assertError != null) {
-                
assertError.setIsFoldedSTListEvaluationMode(isFoldedSTListAssertionEvaluation);
                 reportAssertionsError(assertError);    
             }
         }
-        else {            
-            // evaluate assertion on all of list items
-            // split the "string value" of list contents into non white-space 
tokens.
-            StringTokenizer lstStrTokens = new StringTokenizer(listStrValue, " 
\n\t\r");
-            while (lstStrTokens.hasMoreTokens()) {
-                String itemValue = lstStrTokens.nextToken();
-                setValueOf$valueForSTVarietyList(itemValue, itemType, 
isFoldedSTListAssertionEvaluation);                        
-                AssertionError assertError = evaluateOneAssertion(element, 
assertImpl, itemValue, xpathContextExists, true);
-                if (assertError != null) {
-                    reportAssertionsError(assertError);    
-                }
-            }
-        }
         
     } // evaluateAssertionOnSTListValue
     
@@ -456,14 +446,14 @@ public class XMLAssertPsychopathImpl ext
             // (perhaps impossible?) to determine statically that what all 
assertions can cause validation failure, 
             // when participating in an XML schema union.
             if (isValidationFailedForUnion) {                        
-                 fValidator.reportSchemaError("cvc-assertion.union.3.13.4.1", 
new Object[] {element.rawname, value});   
+                 fValidator.reportSchemaError("cvc-assertion.union.3.13.4.1", 
new Object[] { element.rawname, value } );   
             } 
          }
          else if (isTypeDerivedFromUnion) {
              // although Xerces XSModel treats this case as a simpleType with 
variety union, but from assertions perspective
              // this is treated like a "simpleType -> restriction" case (which 
also appears to be syntactically true in every case?).
              // REVISIT...
-             setValueOf$valueForSTVarietyUnion(value, memberTypes);
+             setValueOf$ValueForSTVarietyUnion(value, memberTypes);
              AssertionError assertError = evaluateOneAssertion(element, 
assertImpl, value, false, false);
              if (assertError != null) {
                  reportAssertionsError(assertError);    
@@ -474,6 +464,47 @@ public class XMLAssertPsychopathImpl ext
     
     
     /*
+     * Set a typed value of XPath2 context variable $value if an atomic value 
on which assertion is been evaluated, is validated by a
+     * simpleType with variety union. 
+     */
+    private void setValueOf$ValueForSTVarietyUnion(String value, XSObjectList 
memberTypes) {
+        
+        // check member types of union in order to find which member type can 
successfully validate the string value,
+        // and set value of XPath2 context variable $value accordingly.
+        for (int memTypeIdx = 0; memTypeIdx < memberTypes.getLength(); 
memTypeIdx++) {
+            XSSimpleType simpleTypeDv = (XSSimpleType) 
memberTypes.item(memTypeIdx);
+            if (XSTypeHelper.isValueValidForASimpleType(value, simpleTypeDv)) {
+               short xsdTypecode = getXercesXSDTypeCodeFor$Value(simpleTypeDv);
+               setValueOf$ValueForSTVarietyAtomic(value, xsdTypecode);
+               break;
+            }            
+        }
+        
+    } // setValueOf$ValueForSTVarietyUnion
+    
+    
+    /*
+     * Set a typed value of XPath2 context variable $value if an atomic value 
on which assertion is been evaluated,
+     * is an item of a schema component xs:list.
+     */
+    private void setValueOf$valueForAListItem(String value, 
XSSimpleTypeDefinition simpType) throws Exception {
+        
+        XSObjectList memberTypes = simpType.getMemberTypes();
+        if (memberTypes.getLength() > 0) {
+            // the list item's type has variety 'union'.
+            XSSimpleTypeDefinition actualListItemType = 
getActualListItemTypeForVarietyUnion(memberTypes, value);
+            // set a schema 'typed value' to variable $value
+            setTypedValueFor$value(value, actualListItemType, null);
+        } 
+        else {
+            // the list item's type has variety 'atomic'.
+            setTypedValueFor$value(value, simpType, null); 
+        }
+
+    } // setValueOf$valueForAListItem
+    
+    
+    /*
      * Determine if an validation must fail due to assertions evaluation for 
"simpleType -> union" member types.
      */
     private boolean isValidationFailedForUnion(XSObjectList memberTypes, QName 
element, String value, boolean isAttribute) {
@@ -496,7 +527,7 @@ public class XMLAssertPsychopathImpl ext
                         for (Iterator iter = assertFacets.iterator(); 
iter.hasNext(); ) {
                             XSAssertImpl assertImpl = (XSAssertImpl) 
iter.next();
                             try {
-                               setTypedValueFor$value(value, memType, null, 
false);
+                               setTypedValueFor$value(value, memType, null);
                                AssertionError assertError = 
evaluateOneAssertion(element, assertImpl, value, false, false);
                                if (assertError == null) {
                                    assertsSucceeded++;  
@@ -608,26 +639,14 @@ public class XMLAssertPsychopathImpl ext
     /*
      * Find a "schema typed value" (of kind xs:anyAtomicType*) to assign to 
XPath2 context variable $value.
      */
-    private void setTypedValueFor$value(String value, XSSimpleTypeDefinition 
listOrUnionType, XSTypeDefinition attrType, boolean 
isFoldedListAssertionEvaluation) throws Exception {
+    private void setTypedValueFor$value(String value, XSSimpleTypeDefinition 
listOrUnionType, XSTypeDefinition attrType) throws Exception {
         
-        // dummy "schema type" short code initializer
+        // dummy short code initializer
         short xsdTypecode = -100;
         
         if (listOrUnionType != null) {
-            if (isFoldedListAssertionEvaluation) {
-                List xdmItemList = new ArrayList();
-                // split the "string value" of list contents into non 
white-space tokens
-                StringTokenizer lstStrTokens = new StringTokenizer(value, " 
\n\t\r");
-                while (lstStrTokens.hasMoreTokens()) {
-                   String itemValue = lstStrTokens.nextToken();
-                   
xdmItemList.add(SchemaTypeValueFactory.newSchemaTypeValue(listOrUnionType.getBuiltInKind(),
 itemValue)); 
-                }
-                fXpath2DynamicContext.set_variable(new 
org.eclipse.wst.xml.xpath2.processor.internal.types.QName("value"), 
getXPath2ResultSequence(xdmItemList));
-            }
-            else {
-               xsdTypecode = getXercesXSDTypeCodeFor$Value(listOrUnionType);
-               setValueOf$ValueForSTVarietyAtomic(value, xsdTypecode);
-            }
+            xsdTypecode = getXercesXSDTypeCodeFor$Value(listOrUnionType);
+            setValueOf$ValueForSTVarietyAtomic(value, xsdTypecode);
         }
         else {
            if (attrType != null) {
@@ -656,6 +675,7 @@ public class XMLAssertPsychopathImpl ext
         
     } // setTypedValueFor$value
     
+    
     /*
      * Set value of XPath2 context variable $value, when variety of it's 
schema type is "simpleType -> atomic".  
      */
@@ -664,45 +684,6 @@ public class XMLAssertPsychopathImpl ext
         fXpath2DynamicContext.set_variable(new 
org.eclipse.wst.xml.xpath2.processor.internal.types.QName(
                                          "value"), (AnyAtomicType) 
psychoPathType);
     } // setValueOf$ValueForSTVarietyAtomic
-    
-    /*
-     * Set a typed value of XPath2 context variable $value if the value on 
which assertion is been evaluated, is value of simpleType list.
-     */
-    private void setValueOf$valueForSTVarietyList(String value, 
XSSimpleTypeDefinition simpType, boolean isFoldedListAssertionEvaluation) 
throws Exception {
-        
-        XSObjectList memberTypes = simpType.getMemberTypes();
-        if (memberTypes.getLength() > 0) {
-            // the list item's type has variety 'union'.
-            XSSimpleTypeDefinition actualListItemType = 
getActualListItemTypeForVarietyUnion(memberTypes, value);
-            // set a schema 'typed value' to variable $value
-            setTypedValueFor$value(value, actualListItemType, null, 
isFoldedListAssertionEvaluation);
-        } 
-        else {
-            // the list item's type has variety 'atomic'.
-            setTypedValueFor$value(value, simpType, null, 
isFoldedListAssertionEvaluation); 
-        }
-
-    } // setValueOf$valueForSTVarietyList
-    
-    
-    /*
-     * Set a typed value of XPath2 context variable $value if an atomic value 
on which assertion is been evaluated, is validated by a
-     * simpleType with variety union. 
-     */
-    private void setValueOf$valueForSTVarietyUnion(String value, XSObjectList 
memberTypes) {
-        
-        // check member types of union in order to find which member type can 
successfully validate the string value,
-        // and set value of XPath2 context variable $value accordingly.
-        for (int memTypeIdx = 0; memTypeIdx < memberTypes.getLength(); 
memTypeIdx++) {
-            XSSimpleType simpleTypeDv = (XSSimpleType) 
memberTypes.item(memTypeIdx);
-            if (XSTypeHelper.isValueValidForASimpleType(value, simpleTypeDv)) {
-               short xsdTypecode = getXercesXSDTypeCodeFor$Value(simpleTypeDv);
-               setValueOf$ValueForSTVarietyAtomic(value, xsdTypecode);
-               break;
-            }            
-        }
-        
-    } // setValueOf$ValueForSTVarietyUnion
 
 
     /*
@@ -712,32 +693,34 @@ public class XMLAssertPsychopathImpl ext
         
         XSComplexTypeDefinition cmplxTypeDef = 
(XSComplexTypeDefinition)typeDef;
         XSSimpleTypeDefinition complexTypeSimplContentType = 
cmplxTypeDef.getSimpleType();
-        
         if (complexTypeSimplContentType.getVariety() == 
XSSimpleTypeDefinition.VARIETY_LIST) {
             // simple content type has variety xs:list
             XSSimpleTypeDefinition listItemType = 
complexTypeSimplContentType.getItemType();
-            // construct a list of atomic XDM items to assign to XPath2 
context variable $value.
+            // split the "string value" of list contents, into non white-space 
tokens.
+            StringTokenizer values = new StringTokenizer(value, " \n\t\r");
+            
+            // construct a list of atomic XDM items, to assign to XPath2 
context variable $value.
             List xdmItemList = new ArrayList();
             final XSObjectList memberTypes = listItemType.getMemberTypes();
-            // split the "string value" of list contents into non white-space 
tokens
-            StringTokenizer lstStrTokens = new StringTokenizer(value, " 
\n\t\r");
             if (memberTypes.getLength() > 0) {
                // itemType of xs:list has variety 'union'. here list items may 
have different types, which are determined below.
-               while (lstStrTokens.hasMoreTokens()) {
-                   String itemValue = lstStrTokens.nextToken();
+               while (values.hasMoreTokens()) {
+                   String itemValue = values.nextToken();
                    XSSimpleTypeDefinition listItemTypeForUnion = 
getActualListItemTypeForVarietyUnion(memberTypes, itemValue);
                    
xdmItemList.add(SchemaTypeValueFactory.newSchemaTypeValue(listItemTypeForUnion.getBuiltInKind(),
 itemValue));
                }                                  
             }
             else {
                // every list item has a same type (the itemType of xs:list).
-               while (lstStrTokens.hasMoreTokens()) {
-                   String itemValue = lstStrTokens.nextToken();
+               while (values.hasMoreTokens()) {
+                   String itemValue = values.nextToken();
                    
xdmItemList.add(SchemaTypeValueFactory.newSchemaTypeValue(listItemType.getBuiltInKind(),
 itemValue)); 
                }                                  
             }
+
             // assign an XPath2 sequence to xpath context variable $value
-            fXpath2DynamicContext.set_variable(new 
org.eclipse.wst.xml.xpath2.processor.internal.types.QName("value"), 
getXPath2ResultSequence(xdmItemList));
+            fXpath2DynamicContext.set_variable(new 
org.eclipse.wst.xml.xpath2.processor.internal.types.QName(
+                                           "value"), 
getXPath2ResultSequence(xdmItemList));
         }
         else if (complexTypeSimplContentType.getVariety() == 
XSSimpleTypeDefinition.VARIETY_UNION) {
             // simple content type has variety xs:union
@@ -754,27 +737,29 @@ public class XMLAssertPsychopathImpl ext
     
     
     /*
-       Find the built-in Xerces schema 'type code' for XPath2 variable $value. 
This function recursively searches the XML schema type hierarchy
-       navigating up the base types to find the needed built-in type.
+       Find the built-in Xerces schema 'type code' for XPath2 variable, 
$value. This function recursively
+       searches the XML schema type hierarchy navigating up the base types, to 
find the needed built-in type.
     */
     private short getXercesXSDTypeCodeFor$Value(XSTypeDefinition elementType) {
             
       if (Constants.NS_XMLSCHEMA.equals(elementType.getNamespace())) {
-         short xsdTypeCode = -100; // dummy initializer         
-         boolean isxsd11Type = false;         
+         short typeCode = -100; // dummy initializer
+         
+         boolean isxsd11Type = false;
+         
          // the below 'if else' clauses are written to process few special 
cases handling few of schema types,
          // within PsychoPath XPath engine.
          final String elementTypeName = elementType.getName();
          if ("dayTimeDuration".equals(elementTypeName)) {
-             xsdTypeCode = PsychoPathTypeHelper.DAYTIMEDURATION_DT;
+             typeCode = PsychoPathTypeHelper.DAYTIMEDURATION_DT;
              isxsd11Type = true;
          }
          else if ("yearMonthDuration".equals(elementTypeName)) {
-             xsdTypeCode = PsychoPathTypeHelper.YEARMONTHDURATION_DT;
+             typeCode = PsychoPathTypeHelper.YEARMONTHDURATION_DT;
              isxsd11Type = true;
          }
          
-         return (isxsd11Type) ? xsdTypeCode : ((XSSimpleTypeDefinition) 
elementType).getBuiltInKind();    
+         return (isxsd11Type) ? typeCode : ((XSSimpleTypeDefinition) 
elementType).getBuiltInKind();    
       }
       else {
          return getXercesXSDTypeCodeFor$Value(elementType.getBaseType()); 
@@ -784,7 +769,7 @@ public class XMLAssertPsychopathImpl ext
     
     
     /*
-     * Construct an PsychoPath XPath2 "result sequence" given a list of XDM 
items as input.
+     * Construct an PsychoPath XPath2 "result sequence", given a list of XDM 
items as input.
      */
     private ResultSequence getXPath2ResultSequence(List xdmItems) {
         
@@ -800,29 +785,6 @@ public class XMLAssertPsychopathImpl ext
     
     
     /*
-     * Find the actual schema type of "list item" instance, if the "item type" 
of list has variety union. 
-     */
-    private XSSimpleTypeDefinition 
getActualListItemTypeForVarietyUnion(XSObjectList memberTypes, String value) {
-
-        XSSimpleTypeDefinition simpleTypeDefn = null;
-        
-        // iterate the member types of union in order, to find that which 
schema type can successfully validate an atomic value first.
-        final int memberTypesLength = memberTypes.getLength();
-        for (int memTypeIdx = 0; memTypeIdx < memberTypesLength; memTypeIdx++) 
{
-           XSSimpleType memSimpleType = (XSSimpleType) 
memberTypes.item(memTypeIdx);
-           if (XSTypeHelper.isValueValidForASimpleType(value, memSimpleType)) {
-              // no more memberTypes need to be checked
-              simpleTypeDefn = memSimpleType; 
-              break; 
-           }
-        }
-        
-        return simpleTypeDefn;
-        
-    } // getActualListItemTypeForVarietyUnion
-    
-    
-    /*
      * Method to report assertions error messages.
      */
     private void reportAssertionsError(AssertionError assertError) {
@@ -830,17 +792,17 @@ public class XMLAssertPsychopathImpl ext
         String key = assertError.getErrorCode();
         QName element = assertError.getElement();
         XSAssertImpl assertImpl = assertError.getAssertion();
-        boolean isList = assertError.isSimpleTypeList();        
-        String value = assertError.getValue();        
+        boolean isList = assertError.isList();
+        String value = assertError.getValue();
         
         XSTypeDefinition typeDef = assertImpl.getTypeDefinition();        
-        String typeNameStrValue = "";
+        String typeString = "";
         
         if (typeDef != null) {
-            typeNameStrValue = (typeDef.getName() != null) ? typeDef.getName() 
: "#anonymous";   
+            typeString = (typeDef.getName() != null) ? typeDef.getName() : 
"#anonymous";   
         }
         else {
-            typeNameStrValue = "#anonymous"; 
+            typeString = "#anonymous"; 
         }
         
         String elemErrorAnnotation = element.rawname;
@@ -850,41 +812,60 @@ public class XMLAssertPsychopathImpl ext
         
         String listAssertErrMessage = "";        
         if (isList) {
-           if (assertError.getIsFoldedListEvaluationMode()) {
-               listAssertErrMessage =  "Assertion failed for xs:list '" + 
assertError.getValue() + "'.";  
-           }
-           else {
-               listAssertErrMessage =  "Assertion failed for an xs:list member 
value '" + assertError.getValue() + "'.";
-           }
+           listAssertErrMessage =  "Assertion failed for an xs:list member 
value '" + assertError.getValue() + "'.";
         }
             
         String message = assertImpl.getMessage();
         if (message != null) {
            // substitute all placeholder macro instances of "{$value}" with 
atomic value stored in variable "value".
            if (value != null && !"".equals(value)) {
-               message = message.replaceAll(ERROR_PLACEHOLDER_REGEX, value);
+              message = message.replaceAll(ERROR_PLACEHOLDER_REGEX, value);
            }
            
            if (!message.endsWith(".")) {
-               message = message + ".";    
+              message = message + ".";    
            }
            if (key.equals("cvc-assertion.4.3.15.3")) {
-               message = "Assertion failed (undefined context) for schema type 
'" + typeNameStrValue + "'. " + message;   
+              message = "Assertion failed (undefined context) for schema type 
'" + typeString + "'. " + message;   
            }
            else {
-               message = "Assertion failed for schema type '" + 
typeNameStrValue + "'. " + message; 
+              message = "Assertion failed for schema type '" + typeString + 
"'. " + message; 
            }           
-           fValidator.reportSchemaError("cvc-assertion.failure", new Object[] 
{message, listAssertErrMessage});    
+           fValidator.reportSchemaError("cvc-assertion.failure", new Object[] 
{ message, listAssertErrMessage } );    
         }
         else {
-           fValidator.reportSchemaError(key, new Object[] 
{elemErrorAnnotation, assertImpl.getTest().getXPath().toString(), 
typeNameStrValue, listAssertErrMessage});
+           fValidator.reportSchemaError(key, new Object[] 
{elemErrorAnnotation, assertImpl.getTest().getXPath().toString(),
+                                                            typeString, 
listAssertErrMessage} );
         }
         
     } // reportAssertionsError
     
     
     /*
-     * Class to store assertion evaluation error details.
+     * Find the actual schema type of "list item" instance, if the "item type" 
of list has variety union. 
+     */
+    private XSSimpleTypeDefinition 
getActualListItemTypeForVarietyUnion(XSObjectList memberTypes, String value) {
+
+        XSSimpleTypeDefinition simpleTypeDefn = null;
+        
+        // iterate the member types of union in order, to find that which 
schema type can successfully validate an atomic value first.
+        final int memberTypesLength = memberTypes.getLength();
+        for (int memTypeIdx = 0; memTypeIdx < memberTypesLength; memTypeIdx++) 
{
+           XSSimpleType memSimpleType = (XSSimpleType) 
memberTypes.item(memTypeIdx);
+           if (XSTypeHelper.isValueValidForASimpleType(value, memSimpleType)) {
+              // no more memberTypes need to be checked
+              simpleTypeDefn = memSimpleType; 
+              break; 
+           }
+        }
+        
+        return simpleTypeDefn;
+        
+    } // getActualListItemTypeForVarietyUnion
+    
+    
+    /*
+     * Class to store "assertion evaluation" error details.
      */
     final class AssertionError {
         
@@ -894,8 +875,7 @@ public class XMLAssertPsychopathImpl ext
         private final XSAssertImpl assertImpl;
         private final String value;
         // does this error concerns "simpleType -> list"
-        private final boolean isSimpleTypeList;
-        private boolean isFoldedSTListAssertionEvaluation = false;
+        private final boolean isList;
         
         // class constructor
         public AssertionError(String errorCode, QName element, XSAssertImpl 
assertImpl, String value, boolean isList) {
@@ -903,13 +883,9 @@ public class XMLAssertPsychopathImpl ext
            this.element = element;
            this.assertImpl = assertImpl;
            this.value = value;
-           this.isSimpleTypeList = isList;
+           this.isList = isList;
         }
         
-        public void setIsFoldedSTListEvaluationMode(boolean 
isFoldedSTListAssertionEvaluation) {
-            this.isFoldedSTListAssertionEvaluation = 
isFoldedSTListAssertionEvaluation; 
-        }
-
         public String getErrorCode() {
            return errorCode;    
         }
@@ -926,12 +902,8 @@ public class XMLAssertPsychopathImpl ext
            return value; 
         }
         
-        public boolean isSimpleTypeList() {
-           return isSimpleTypeList;    
-        }
-        
-        public boolean getIsFoldedListEvaluationMode() {
-            return isFoldedSTListAssertionEvaluation;
+        public boolean isList() {
+           return isList;    
         }
         
     } // class AssertionError

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java?rev=1070002&r1=1070001&r2=1070002&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
 Sat Feb 12 01:18:28 2011
@@ -209,10 +209,6 @@ public class XMLSchemaValidator
     /** Feature identifier: whether to ignore type alternatives */
     protected static final String TYPE_ALTERNATIVES_CHECKING =
         Constants.XERCES_FEATURE_PREFIX + 
Constants.TYPE_ALTERNATIVES_CHEKING_FEATURE;
-    
-    /** Feature identifier: whether to evaluate assertions on each simpleType 
list item */
-    protected static final String SIMPLETYPE_FOLDEDLIST_ASSERTION_EVALUATION =
-        Constants.XERCES_FEATURE_PREFIX + 
Constants.SIMPLETYPE_FOLDEDLIST_ASSERTION_FEATURE;
 
     // property identifiers
 
@@ -1316,8 +1312,6 @@ public class XMLSchemaValidator
     private boolean fIDCChecking;
 
     private boolean fTypeAlternativesChecking;
-    
-    private boolean fSTFoldedSTListAssertionEvaluation;
 
     /** temporary validated info */
     private ValidatedInfo fValidatedInfo = new ValidatedInfo();
@@ -1507,7 +1501,9 @@ public class XMLSchemaValidator
             fAugPSVI = true;
         }
         try {
-            fSchemaType = (String) 
componentManager.getProperty(Constants.JAXP_PROPERTY_PREFIX + 
Constants.SCHEMA_LANGUAGE);
+            fSchemaType =
+                (String) componentManager.getProperty(
+                    Constants.JAXP_PROPERTY_PREFIX + 
Constants.SCHEMA_LANGUAGE);
         } catch (XMLConfigurationException e) {
             fSchemaType = null;
         }
@@ -1608,13 +1604,6 @@ public class XMLSchemaValidator
             fTypeAlternativesChecking = true;
         }
         
-        try {
-            fSTFoldedSTListAssertionEvaluation = 
componentManager.getFeature(SIMPLETYPE_FOLDEDLIST_ASSERTION_EVALUATION);
-        }
-        catch (XMLConfigurationException e) {
-            fSTFoldedSTListAssertionEvaluation = false;
-        }
-        
         // get schema location properties
         try {
             fExternalSchemas = (String) 
componentManager.getProperty(SCHEMA_LOCATION);
@@ -2172,7 +2161,8 @@ public class XMLSchemaValidator
 
         //process type alternatives
         if (fTypeAlternativesChecking && fCurrentElemDecl != null) {
-            XSTypeDefinition currentType = 
fTypeAlternativeValidator.getCurrentType(fCurrentElemDecl, element, 
attributes);           
+            XSTypeDefinition currentType = 
fTypeAlternativeValidator.getCurrentType(fCurrentElemDecl, 
+                                                                               
     element, attributes);           
            if (currentType != null) {
                fCurrentType = currentType;    
            }
@@ -2415,7 +2405,7 @@ public class XMLSchemaValidator
         
         // delegate to assertions validator subcomponent
         if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
-            fAssertionValidator.handleStartElement(element, attributes, 
fSTFoldedSTListAssertionEvaluation);
+            fAssertionValidator.handleStartElement(element, attributes);
         }
 
         return augs;

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java?rev=1070002&r1=1070001&r2=1070002&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XSDAssertionValidator.java
 Sat Feb 12 01:18:28 2011
@@ -82,7 +82,7 @@ public class XSDAssertionValidator {
     /*
      * Assertions processing interface during the XNI event, 
'handleStartElement' in XMLSchemaValidator.
      */
-    public void handleStartElement(QName element, XMLAttributes attributes, 
boolean stFoldedListAssertionEvaluation) {
+    public void handleStartElement(QName element, XMLAttributes attributes) {
        
         // get list of assertions for processing
         List assertionList = getAssertsForEvaluation(element, attributes);
@@ -101,7 +101,6 @@ public class XSDAssertionValidator {
             
             Map assertProcessorParams = new HashMap();
             assertProcessorParams.put("XPATH2_NS_CONTEXT", 
xpathNamespaceContext);
-            assertProcessorParams.put("FOLDED_STLIST_ASSERT_FEATURE", 
Boolean.valueOf(stFoldedListAssertionEvaluation));
             // initialize the assertions processor
             initializeAssertProcessor(assertProcessorParams);
         }
@@ -110,7 +109,7 @@ public class XSDAssertionValidator {
         if (fAssertionProcessor != null) {
            // construct the augmentations object, for assertions
            AugmentationsImpl assertAugs = new AugmentationsImpl();
-           assertAugs.putItem("ASSERT", assertionList);           
+           assertAugs.putItem("ASSERT", assertionList);
            fAssertionProcessor.startElement(element, attributes, assertAugs);
         }
         

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/XMLSchemaValidatorComponentManager.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/XMLSchemaValidatorComponentManager.java?rev=1070002&r1=1070001&r2=1070002&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/XMLSchemaValidatorComponentManager.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/jaxp/validation/XMLSchemaValidatorComponentManager.java
 Sat Feb 12 01:18:28 2011
@@ -87,10 +87,6 @@ final class XMLSchemaValidatorComponentM
     private static final String TYPE_ALTERNATIVES_CHECKING =
         Constants.XERCES_FEATURE_PREFIX + 
Constants.TYPE_ALTERNATIVES_CHEKING_FEATURE;
     
-    /** Feature identifier: whether to evaluate assertions on each simpleType 
list item */
-    private static final String SIMPLETYPE_FOLDEDLIST_ASSERTION_EVALUATION =
-        Constants.XERCES_FEATURE_PREFIX + 
Constants.SIMPLETYPE_FOLDEDLIST_ASSERTION_FEATURE;
-    
     /** Feature identifier: disallow DOCTYPE declaration */
     private static final String DISALLOW_DOCTYPE_DECL_FEATURE =
         Constants.XERCES_FEATURE_PREFIX + 
Constants.DISALLOW_DOCTYPE_DECL_FEATURE;
@@ -259,15 +255,13 @@ final class XMLSchemaValidatorComponentM
                 DISALLOW_DOCTYPE_DECL_FEATURE,
                 NORMALIZE_DATA,
                 SCHEMA_ELEMENT_DEFAULT,
-                SCHEMA_AUGMENT_PSVI,
-                SIMPLETYPE_FOLDEDLIST_ASSERTION_EVALUATION
+                SCHEMA_AUGMENT_PSVI
         };
         addRecognizedFeatures(recognizedFeatures);
         fFeatures.put(DISALLOW_DOCTYPE_DECL_FEATURE, Boolean.FALSE);
         fFeatures.put(NORMALIZE_DATA, Boolean.FALSE);
         fFeatures.put(SCHEMA_ELEMENT_DEFAULT, Boolean.FALSE);
         fFeatures.put(SCHEMA_AUGMENT_PSVI, Boolean.TRUE);
-        fFeatures.put(SIMPLETYPE_FOLDEDLIST_ASSERTION_EVALUATION, 
Boolean.FALSE);
         
         addRecognizedParamsAndSetDefaults(fEntityManager, grammarContainer);
         addRecognizedParamsAndSetDefaults(fErrorReporter, grammarContainer);
@@ -292,7 +286,6 @@ final class XMLSchemaValidatorComponentM
         fFeatures.put(ID_IDREF_CHECKING, Boolean.TRUE);
         fFeatures.put(IDENTITY_CONSTRAINT_CHECKING, Boolean.TRUE);
         fFeatures.put(UNPARSED_ENTITY_CHECKING, Boolean.TRUE);
-        fFeatures.put(TYPE_ALTERNATIVES_CHECKING, Boolean.TRUE);
         fFeatures.put(TYPE_ALTERNATIVES_CHECKING, Boolean.TRUE);        
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to