package tundra;
// -----( IS Java Code Template v1.2
// -----( CREATED: 2017-05-07 14:07:30 EST
// -----( ON-HOST: 192.168.66.129
import com.wm.data.*;
import com.wm.util.Values;
import com.wm.app.b2b.server.Service;
import com.wm.app.b2b.server.ServiceException;
// --- <<IS-START-IMPORTS>> ---
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javax.xml.namespace.NamespaceContext;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import permafrost.tundra.data.IDataHelper;
import permafrost.tundra.io.InputStreamHelper;
import permafrost.tundra.lang.BooleanHelper;
import permafrost.tundra.lang.CharsetHelper;
import permafrost.tundra.lang.ExceptionHelper;
import permafrost.tundra.math.IntegerHelper;
import permafrost.tundra.xml.dom.DocumentHelper;
import permafrost.tundra.xml.dom.Nodes;
import permafrost.tundra.xml.namespace.IDataNamespaceContext;
import permafrost.tundra.xml.xpath.XPathHelper;
// --- <<IS-END-IMPORTS>> ---
public final class xpath
{
// ---( internal utility methods )---
final static xpath _instance = new xpath();
static xpath _newInstance() { return new xpath(); }
static xpath _cast(Object o) { return (xpath)o; }
// ---( server methods )---
public static final void exists (IData pipeline)
throws ServiceException
{
// --- <<IS-START(exists)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] object:0:optional $content
// [i] field:0:optional $encoding
// [i] field:0:required $expression
// [i] record:0:optional $namespace
// [i] - field:0:optional default
// [o] field:0:required $exists?
IDataCursor cursor = pipeline.getCursor();
try {
Object content = IDataHelper.get(cursor, "$content");
Charset charset = IDataHelper.get(cursor, "$encoding", Charset.class);
String expression = IDataHelper.get(cursor, "$expression", String.class);
NamespaceContext namespace = IDataHelper.get(cursor, "$namespace", IDataNamespaceContext.class);
XPathExpression compiledExpression = XPathHelper.compile(expression, namespace);
Node node = null;
if (content instanceof Node) {
node = (Node)content;
} else if (content instanceof InputSource) {
node = DocumentHelper.parse((InputSource)content, namespace);
} else if (content != null) {
node = DocumentHelper.parse(InputStreamHelper.normalize(content, charset), charset, true, namespace);
}
IDataHelper.put(cursor, "$exists?", XPathHelper.exists(node, compiledExpression), String.class);
} catch(XPathExpressionException ex) {
ExceptionHelper.raise(ex);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void get (IData pipeline)
throws ServiceException
{
// --- <<IS-START(get)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] object:0:optional $content
// [i] field:0:optional $encoding
// [i] field:0:required $expression
// [i] record:0:optional $namespace
// [i] - field:0:optional default
// [i] field:0:optional $recurse? {"false","true"}
// [o] record:1:optional $nodes
// [o] - object:0:required node
// [o] - field:0:required name.qualified
// [o] - field:0:optional name.local
// [o] - field:0:optional name.prefix
// [o] - field:0:optional name.uri
// [o] - field:0:required type
// [o] - field:0:optional value
// [o] - record:1:optional attributes
// [o] -- object:0:required node
// [o] -- field:0:required name.qualified
// [o] -- field:0:optional name.local
// [o] -- field:0:optional name.prefix
// [o] -- field:0:optional name.uri
// [o] -- field:0:required type
// [o] -- field:0:optional value
// [o] - record:1:optional elements
// [o] -- object:0:required node
// [o] -- field:0:required name.qualified
// [o] -- field:0:optional name.local
// [o] -- field:0:optional name.prefix
// [o] -- field:0:optional name.uri
// [o] -- field:0:required type
// [o] -- field:0:optional value
// [o] field:0:required $nodes.length
IDataCursor cursor = pipeline.getCursor();
try {
Object content = IDataHelper.get(cursor, "$content");
Charset charset = IDataHelper.get(cursor, "$encoding", Charset.class);
String expression = IDataHelper.get(cursor, "$expression", String.class);
NamespaceContext namespace = IDataHelper.get(cursor, "$namespace", IDataNamespaceContext.class);
boolean recurse = IDataHelper.getOrDefault(cursor, "$recurse?", Boolean.class, false);
XPathExpression compiledExpression = XPathHelper.compile(expression, namespace);
Node node = null;
if (content instanceof Node) {
node = (Node)content;
} else if (content instanceof InputSource) {
node = DocumentHelper.parse((InputSource)content, namespace);
} else if (content != null) {
node = DocumentHelper.parse(InputStreamHelper.normalize(content, charset), charset, true, namespace);
}
Nodes nodes = XPathHelper.get(node, compiledExpression);
if (nodes != null) {
IDataHelper.put(cursor, "$nodes", nodes.reflect(namespace, recurse));
IDataHelper.put(cursor, "$nodes.length", nodes.size(), String.class);
} else {
IDataUtil.put(cursor, "$nodes.length", "0");
}
} catch(XPathExpressionException ex) {
ExceptionHelper.raise(ex);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
}