summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/common-xml/src/main/java/org/apache/tuscany/sca/common/xml/xpath/XPathHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/sca/modules/common-xml/src/main/java/org/apache/tuscany/sca/common/xml/xpath/XPathHelper.java')
-rw-r--r--java/sca/modules/common-xml/src/main/java/org/apache/tuscany/sca/common/xml/xpath/XPathHelper.java151
1 files changed, 0 insertions, 151 deletions
diff --git a/java/sca/modules/common-xml/src/main/java/org/apache/tuscany/sca/common/xml/xpath/XPathHelper.java b/java/sca/modules/common-xml/src/main/java/org/apache/tuscany/sca/common/xml/xpath/XPathHelper.java
deleted file mode 100644
index a65bd5fe15..0000000000
--- a/java/sca/modules/common-xml/src/main/java/org/apache/tuscany/sca/common/xml/xpath/XPathHelper.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.tuscany.sca.common.xml.xpath;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.xml.XMLConstants;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
-
-import org.apache.tuscany.sca.common.xml.stax.reader.NamespaceContextImpl;
-import org.apache.tuscany.sca.core.ExtensionPointRegistry;
-import org.apache.tuscany.sca.core.FactoryExtensionPoint;
-import org.apache.tuscany.sca.core.UtilityExtensionPoint;
-
-/**
- * Helper for XPath operations
- */
-public class XPathHelper {
- private XPathFactory factory;
-
- /**
- * @param factory
- */
- public XPathHelper(XPathFactory factory) {
- super();
- this.factory = factory;
- }
-
- public XPathHelper(ExtensionPointRegistry registry) {
- FactoryExtensionPoint factories = registry.getExtensionPoint(FactoryExtensionPoint.class);
- this.factory = factories.getFactory(XPathFactory.class);
- }
-
- public static XPathHelper getInstance(ExtensionPointRegistry registry) {
- UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);
- return utilities.getUtility(XPathHelper.class);
- }
-
- public XPath newXPath() {
- return factory.newXPath();
- }
-
- public XPathExpression compile(NamespaceContext context, String expression) throws XPathExpressionException {
- XPath path = newXPath();
- context = getNamespaceContext(expression, context);
- return compile(path, context, expression);
- }
-
- public XPathExpression compile(XPath path, NamespaceContext context, String expression)
- throws XPathExpressionException {
- path.setNamespaceContext(context);
- return path.compile(expression);
- }
-
- /**
- * Take a snapshot of the given namespace context based on the prefixes found in the expression.
- * In StAX, the prefix/namespace mapping in the namespace context can change as the event moves
- * @param expression
- * @param context
- * @return
- */
- public NamespaceContext getNamespaceContext(String expression, NamespaceContext context) {
- NamespaceContextImpl nsContext = new NamespaceContextImpl(null);
-
- for (String prefix : getPrefixes(expression)) {
- String namespace = context.getNamespaceURI(prefix);
- if (namespace != null && !XMLConstants.NULL_NS_URI.equals(namespace)) {
- nsContext.register(prefix, namespace);
- }
- }
- return nsContext;
- }
-
- /**
- * Parse the XPath expression to collect all the prefixes for namespaces
- * @param expression
- * @return A collection of prefixes
- */
- private Collection<String> getPrefixes(String expression) {
- Collection<String> prefixes = new HashSet<String>();
- prefixes.add(XMLConstants.DEFAULT_NS_PREFIX);
- Pattern pattern = Pattern.compile("([^:]+):([^:]+)");
- Matcher matcher = pattern.matcher(expression);
- while (matcher.find()) {
- String prefix = extractNCName(matcher.group(1), true);
- String local = extractNCName(matcher.group(2), false);
- if (prefix != null && local != null) {
- prefixes.add(prefix);
- }
- }
- return prefixes;
- }
-
- private String extractNCName(String str, boolean reverse) {
- if (str.length() < 1) {
- return null;
- }
- if (!reverse) {
- if (!XMLCharHelper.isNCNameStart(str.charAt(0))) {
- return null;
- }
- int i = 0, j = str.length();
- // Find the last non-NCName char
- for (; i < j; i++) {
- if (!XMLCharHelper.isNCName(str.charAt(i))) {
- break;
- }
- }
- return str.substring(0, i);
- } else {
- int j = str.length() - 1;
- // Find the first non-NCName char
- for (; j >= 0; j--) {
- if (!XMLCharHelper.isNCName(str.charAt(j))) {
- break;
- }
- }
- // j is before the first char of the prefix
- if (j != (str.length() - 1) && XMLCharHelper.isNCNameStart(str.charAt(j + 1))) {
- return str.substring(j + 1);
- } else {
- return null;
- }
- }
- }
-
-}