# HG changeset patch # User František Kučera # Date 1409842607 -7200 # Node ID b814f45b6beb6695238ca983273ba9ba7fb0bac7 # Parent 96ce967c018210eb12dd006dec5d12d57913c1a1 out-xpath: XPath parameters diff -r 96ce967c0182 -r b814f45b6beb java/alt2xml-out-xpath/src/cz/frantovo/alt2xml/out/xpath/PropertiesVariableResolver.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/alt2xml-out-xpath/src/cz/frantovo/alt2xml/out/xpath/PropertiesVariableResolver.java Thu Sep 04 16:56:47 2014 +0200 @@ -0,0 +1,41 @@ +/** + * Alt2XML + * Copyright © 2014 František Kučera (frantovo.cz) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package cz.frantovo.alt2xml.out.xpath; + +import java.util.Properties; +import javax.xml.namespace.QName; +import javax.xml.xpath.XPathVariableResolver; + +/** + * + * @author Ing. František Kučera (frantovo.cz) + */ +public class PropertiesVariableResolver implements XPathVariableResolver { + + private Properties data; + + public PropertiesVariableResolver(Properties data) { + this.data = data; + } + + @Override + public Object resolveVariable(QName variableName) { + return data.getProperty(variableName.getLocalPart()); + } + +} diff -r 96ce967c0182 -r b814f45b6beb java/alt2xml-out-xpath/src/cz/frantovo/alt2xml/out/xpath/XPathAction.java --- a/java/alt2xml-out-xpath/src/cz/frantovo/alt2xml/out/xpath/XPathAction.java Thu Sep 04 16:28:49 2014 +0200 +++ b/java/alt2xml-out-xpath/src/cz/frantovo/alt2xml/out/xpath/XPathAction.java Thu Sep 04 16:56:47 2014 +0200 @@ -35,33 +35,39 @@ private final XPathFactory xpathFactory; private final XPath xpath; + private final String expressionString; + private final XPathExpression xpathExpression; - public XPathAction(ActionContext actionContext) { + public XPathAction(ActionContext actionContext) throws OutputActionException { super(actionContext); xpathFactory = XPathFactory.newInstance(); xpath = xpathFactory.newXPath(); - } - @Override - public void run(DOMResult domResult) throws OutputActionException { + if (!actionContext.getActionProperties().isEmpty()) { + xpath.setXPathVariableResolver(new PropertiesVariableResolver(actionContext.getActionProperties())); + } if (getActionContext().getActionData().size() == 1) { - String expressionString = getActionContext().getActionData().get(0); - + expressionString = getActionContext().getActionData().get(0); try { - XPathExpression xpe = xpath.compile(expressionString); - - String result = xpe.evaluate(domResult.getNode()); - - try (PrintWriter out = new PrintWriter(getActionContext().getOutputStream())) { - out.println(result); - } - + xpathExpression = xpath.compile(expressionString); } catch (XPathExpressionException e) { - throw new OutputActionException("Unable to compile or evaluate XPath: " + expressionString, e); + throw new OutputActionException("Unable to compile XPath: " + expressionString, e); } } else { throw new OutputActionException("Please specify the XPath expression as action data"); } } + + @Override + public void run(DOMResult domResult) throws OutputActionException { + try { + String result = xpathExpression.evaluate(domResult.getNode()); + try (PrintWriter out = new PrintWriter(getActionContext().getOutputStream())) { + out.println(result); + } + } catch (XPathExpressionException e) { + throw new OutputActionException("Unable to evaluate XPath: " + xpathExpression, e); + } + } }