1 22 23 package org.xquark.schema.datatypes; 24 25 import java.util.ArrayList ; 26 import java.util.List ; 27 import java.util.StringTokenizer ; 28 29 import org.xquark.schema.SchemaException; 30 import org.xquark.schema.validation.ValidationContextProvider; 31 32 33 class PrimitiveListType extends MesureableType { 34 private static final String RCSRevision = "$Revision: 1.2 $"; 35 private static final String RCSName = "$Name: $"; 36 37 PrimitiveType itemPrimitive; 38 39 PrimitiveListType(PrimitiveType itemPrimitive) { 40 super("list of " + itemPrimitive.getName(), PrimitiveType.LIST); 41 this.itemPrimitive = itemPrimitive; 42 } 43 44 protected Object toValidType(Object data) { 45 return (List ) data; 46 } 47 48 private ArrayList checkPrimitiveList(String value, ValidationContextProvider context) throws SchemaException { 49 StringTokenizer tok = new StringTokenizer (value); 50 ArrayList result = new ArrayList (); 51 while (tok.hasMoreTokens()) { 52 String token = tok.nextToken(); 53 try { 54 Object actual = itemPrimitive.convert(token, context); 55 result.add(actual); 56 } catch (SchemaException se) { 57 throw new SchemaException("cvc-datatype-valid.1.2.2", this, se); 58 } 59 } 60 return result; 61 } 62 63 public void checkFacets(Object valueSpace) throws SchemaException { 64 super.checkFacets(valueSpace); 65 super.checkLength(((ArrayList )valueSpace).size(), valueSpace); 66 } 67 68 protected Object toValueSpace(String value, ValidationContextProvider context) throws SchemaException { 69 return checkPrimitiveList(value, context); 70 } 71 72 public String toXMLString(Object data, ValidationContextProvider context) { 73 if (data == null) return null; 74 List list = (List )data; 75 StringBuffer buf = new StringBuffer (); 76 for (int i = 0; i < list.size(); i++) { 77 buf.append(itemPrimitive.toXMLString(list.get(i), context)); 78 buf.append(' '); 79 } 80 int buflen = buf.length(); 81 if (buflen > 0) buf.setLength(buflen-1); 82 return buf.toString(); 83 } 84 85 } 86 | Popular Tags |