| package org.eclipse.wst.xml.xpath2.processor.internal; |
| |
| import java.net.URI; |
| import java.net.URISyntaxException; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.Comparator; |
| import java.util.Iterator; |
| import java.util.Map; |
| |
| import javax.xml.XMLConstants; |
| import javax.xml.namespace.NamespaceContext; |
| |
| import org.eclipse.wst.xml.xpath2.api.CollationProvider; |
| import org.eclipse.wst.xml.xpath2.api.EvaluationContext; |
| import org.eclipse.wst.xml.xpath2.api.Function; |
| import org.eclipse.wst.xml.xpath2.api.FunctionLibrary; |
| import org.eclipse.wst.xml.xpath2.api.ResultSequence; |
| import org.eclipse.wst.xml.xpath2.api.StaticContext; |
| import org.eclipse.wst.xml.xpath2.api.StaticVariableResolver; |
| import org.eclipse.wst.xml.xpath2.api.typesystem.TypeDefinition; |
| import org.eclipse.wst.xml.xpath2.api.typesystem.TypeModel; |
| import org.eclipse.wst.xml.xpath2.processor.DefaultDynamicContext; |
| import org.eclipse.wst.xml.xpath2.processor.DynamicContext; |
| import org.eclipse.wst.xml.xpath2.processor.internal.types.NodeItemTypeImpl; |
| import org.eclipse.wst.xml.xpath2.processor.internal.types.QName; |
| import org.eclipse.wst.xml.xpath2.processor.internal.types.SimpleAtomicItemTypeImpl; |
| import org.eclipse.wst.xml.xpath2.processor.internal.types.builtin.BuiltinTypeLibrary; |
| import org.w3c.dom.Node; |
| |
| public class StaticContextAdapter implements |
| org.eclipse.wst.xml.xpath2.api.StaticContext { |
| private final org.eclipse.wst.xml.xpath2.processor.StaticContext sc; |
| |
| public StaticContextAdapter( |
| org.eclipse.wst.xml.xpath2.processor.StaticContext sc) { |
| this.sc = sc; |
| } |
| |
| public boolean isXPath1Compatible() { |
| return sc.xpath1_compatible(); |
| } |
| |
| public StaticVariableResolver getInScopeVariables() { |
| return new StaticVariableResolver() { |
| |
| public boolean isVariablePresent(javax.xml.namespace.QName name) { |
| return sc.variable_exists(qn(name)); |
| } |
| |
| public org.eclipse.wst.xml.xpath2.api.typesystem.ItemType getVariableType(javax.xml.namespace.QName name) { |
| return new SimpleAtomicItemTypeImpl(BuiltinTypeLibrary.XS_ANYTYPE); |
| } |
| }; |
| } |
| |
| private QName qn(javax.xml.namespace.QName name) { |
| return new QName(name); |
| } |
| |
| public TypeDefinition getInitialContextType() { |
| return BuiltinTypeLibrary.XS_UNTYPED; |
| } |
| |
| public Map<String, FunctionLibrary> getFunctionLibraries() { |
| if (sc instanceof DefaultStaticContext) { |
| DefaultStaticContext dsc = (DefaultStaticContext)sc; |
| return dsc.get_function_libraries(); |
| } |
| return Collections.emptyMap(); |
| } |
| |
| public CollationProvider getCollationProvider() { |
| if (sc instanceof DynamicContext) { |
| final DynamicContext dc = (DynamicContext)sc; |
| return new CollationProvider() { |
| |
| public String getDefaultCollation() { |
| return dc.default_collation_name(); |
| } |
| |
| public Comparator getCollation(String name) { |
| return dc.get_collation(name); |
| } |
| }; |
| } |
| |
| return new CollationProvider() { |
| |
| public String getDefaultCollation() { |
| return null; |
| } |
| |
| public Comparator getCollation(String name) { |
| return null; |
| } |
| }; |
| } |
| |
| public URI getBaseUri() { |
| // TODO Auto-generated method stub |
| try { |
| return new URI(sc.base_uri().getStringValue()); |
| } catch (URISyntaxException e) { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| public NamespaceContext getNamespaceContext() { |
| return new NamespaceContext() { |
| |
| public Iterator getPrefixes(String arg0) { |
| return Collections.emptyList().iterator(); |
| } |
| |
| public String getPrefix(String arg0) { |
| return "x"; |
| } |
| |
| public String getNamespaceURI(String prefix) { |
| String ns = sc.resolve_prefix(prefix); |
| return ns != null ? ns : XMLConstants.NULL_NS_URI; |
| } |
| }; |
| } |
| |
| public String getDefaultNamespace() { |
| return sc.default_namespace(); |
| } |
| |
| public String getDefaultFunctionNamespace() { |
| return sc.default_function_namespace(); |
| } |
| |
| public TypeModel getTypeModel() { |
| return sc.getTypeModel(null); |
| } |
| |
| public Function resolveFunction(javax.xml.namespace.QName name, int arity) { |
| if (sc.function_exists(new QName(name), arity)) { |
| if (sc instanceof DefaultDynamicContext) { |
| DefaultDynamicContext dc = (DefaultDynamicContext)sc; |
| return dc.function(new QName(name), arity); |
| } |
| return new Function() { |
| public String getName() { |
| return null; |
| } |
| public int getMinArity() { |
| return 0; |
| } |
| public int getMaxArity() { |
| return 0; |
| } |
| public boolean isVariableArgument() { |
| return false; |
| } |
| public boolean canMatchArity(int actualArity) { |
| return false; |
| } |
| public TypeDefinition getResultType() { |
| return null; |
| } |
| public TypeDefinition getArgumentType(int index) { |
| return null; |
| } |
| public String getArgumentNameHint(int index) { |
| return null; |
| } |
| public ResultSequence evaluate(Collection args, EvaluationContext evaluationContext) { |
| return null; |
| } |
| public TypeDefinition computeReturnType(Collection args, StaticContext sc) { |
| return null; |
| } |
| }; |
| } else { |
| return null; |
| } |
| } |
| |
| public TypeDefinition getCollectionType(String collectionName) { |
| return BuiltinTypeLibrary.XS_UNTYPED; |
| } |
| |
| public TypeDefinition getDefaultCollectionType() { |
| return BuiltinTypeLibrary.XS_UNTYPED; |
| |
| } |
| |
| public org.eclipse.wst.xml.xpath2.api.typesystem.ItemType getDocumentType( |
| URI documentUri) { |
| return new NodeItemTypeImpl(org.eclipse.wst.xml.xpath2.api.typesystem.ItemType.OCCURRENCE_OPTIONAL, Node.DOCUMENT_NODE); |
| } |
| } |