1 22 23 package org.xquark.xquery.typing; 24 25 import org.xquark.schema.Particle; 26 import org.xquark.schema.SchemaException; 27 import org.xquark.schema.SchemaManager; 28 import org.xquark.xpath.StepExpr; 29 import org.xquark.xquery.parser.XQueryException; 30 31 public class Utils { 32 33 private static ComputeSubTypeVisitor subTypeVisistor = null; 34 35 public static QType getSubType(byte contextType, QType qtype, StepExpr step, SchemaManager schemamanager, boolean inPredicate) throws TypeException, XQueryException { 36 if (subTypeVisistor == null) 37 subTypeVisistor = new ComputeSubTypeVisitor(); 38 subTypeVisistor.reset(contextType, step, schemamanager); 39 try { 40 qtype.accept(subTypeVisistor); 41 } catch (XQueryException e) { 42 throw new TypeException(e.getMessage()); 43 } 44 QType result = subTypeVisistor.getResultQType(); 45 if (result != null && !inPredicate) 46 result = result.changeOccurence(QType.computeOccurence(qtype.getOccurence(), result.getOccurence())); 47 return result; 48 } 49 50 private static OccurrenceVisitor occurrenceVisistor = null; 51 52 public static OccurrenceVisitor getOccurrenceVisitor() { 53 return occurrenceVisistor; 54 } 55 56 public static void getSubType(Particle particle, String namespace, String name, SchemaManager schemamanager) throws TypeException { 57 if (occurrenceVisistor == null) 58 occurrenceVisistor = new OccurrenceVisitor(); 59 occurrenceVisistor.reset(namespace, name, schemamanager); 60 try { 61 particle.accept(occurrenceVisistor); 62 } catch (SchemaException e) { 63 throw new TypeException(e.getMessage()); 64 } 65 } 66 67 } 68 | Popular Tags |