
se.ugli.durian.j.dom.query.jaxen.DurianNavigator Maven / Gradle / Ivy
The newest version!
package se.ugli.durian.j.dom.query.jaxen;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.jaxen.FunctionCallException;
import org.jaxen.Navigator;
import org.jaxen.UnsupportedAxisException;
import org.jaxen.XPath;
import org.jaxen.pattern.Pattern;
import org.jaxen.saxpath.SAXPathException;
import org.jaxen.util.AncestorAxisIterator;
import org.jaxen.util.AncestorOrSelfAxisIterator;
import org.jaxen.util.DescendantAxisIterator;
import org.jaxen.util.DescendantOrSelfAxisIterator;
import org.jaxen.util.FollowingAxisIterator;
import org.jaxen.util.FollowingSiblingAxisIterator;
import org.jaxen.util.PrecedingAxisIterator;
import org.jaxen.util.PrecedingSiblingAxisIterator;
import org.jaxen.util.SelfAxisIterator;
import se.ugli.durian.j.dom.node.Attribute;
import se.ugli.durian.j.dom.node.Content;
import se.ugli.durian.j.dom.node.Element;
import se.ugli.durian.j.dom.node.Node;
import se.ugli.durian.j.dom.node.Text;
public class DurianNavigator implements Navigator {
private static final long serialVersionUID = 2313253033675992336L;
private final Document document;
public DurianNavigator(final Element element) {
document = new Document(getRoot(element));
}
private Element getRoot(final Element element) {
if (element.getParent() == null) {
return element;
}
return getRoot(element.getParent());
}
@Override
public String getAttributeName(final Object attr) {
final Attribute attribute = (Attribute) attr;
return attribute.getName();
}
@SuppressWarnings("unused")
@Override
public String getAttributeNamespaceUri(final Object attr) {
return null;
}
@SuppressWarnings("unused")
@Override
public String getAttributeQName(final Object attr) {
throw new UnsupportedOperationException();
}
@Override
public String getAttributeStringValue(final Object attr) {
final Attribute attribute = (Attribute) attr;
return attribute.getValue();
}
@SuppressWarnings("unused")
@Override
public String getCommentStringValue(final Object comment) {
throw new UnsupportedOperationException();
}
@Override
public String getElementName(final Object object) {
final Element element = (Element) object;
return element.getName();
}
@SuppressWarnings("unused")
@Override
public String getElementNamespaceUri(final Object object) {
return null;
}
@SuppressWarnings("unused")
@Override
public String getElementQName(final Object object) {
throw new UnsupportedOperationException();
}
@Override
public String getElementStringValue(final Object object) {
final Element element = (Element) object;
final StringBuilder stringBuilder = new StringBuilder();
for (final Text text : element.getTexts()) {
stringBuilder.append(text.getValue());
}
return stringBuilder.toString();
}
@SuppressWarnings("unused")
@Override
public String getNamespacePrefix(final Object ns) {
throw new UnsupportedOperationException();
}
@SuppressWarnings("unused")
@Override
public String getNamespaceStringValue(final Object ns) {
throw new UnsupportedOperationException();
}
@Override
public String getTextStringValue(final Object text) {
final Text textObject = (Text) text;
return textObject.getValue();
}
@Override
public boolean isAttribute(final Object object) {
return object instanceof Attribute;
}
@SuppressWarnings("unused")
@Override
public boolean isComment(final Object object) {
return false;
}
@Override
public boolean isDocument(final Object object) {
return object instanceof Document;
}
@Override
public boolean isElement(final Object object) {
return object instanceof Element;
}
@SuppressWarnings("unused")
@Override
public boolean isNamespace(final Object object) {
return false;
}
@SuppressWarnings("unused")
@Override
public boolean isProcessingInstruction(final Object object) {
return false;
}
@Override
public boolean isText(final Object object) {
return object instanceof Text;
}
@SuppressWarnings("unused")
@Override
public XPath parseXPath(final String xpath) throws SAXPathException {
throw new UnsupportedOperationException();
}
@Override
public Iterator getChildAxisIterator(final Object contextNode) {
if (contextNode instanceof Document) {
final Document document = (Document) contextNode;
final List rootContent = new ArrayList();
rootContent.add(document.root);
return rootContent.iterator();
}
else if (contextNode instanceof Element) {
final Element element = (Element) contextNode;
return element.getContent().iterator();
}
else if (contextNode instanceof Text) {
return new ArrayList().iterator();
}
else {
throw new IllegalStateException(contextNode.getClass().getName());
}
}
@Override
public Iterator> getDescendantAxisIterator(final Object contextNode) throws UnsupportedAxisException {
return new DescendantAxisIterator(contextNode, this);
}
@Override
public Iterator getParentAxisIterator(final Object contextNode) {
if (contextNode instanceof Element) {
final Element element = (Element) contextNode;
if (element.getParent() != null) {
return Collections.singletonList(element.getParent()).iterator();
}
}
return new ArrayList().iterator();
}
@Override
public Iterator> getAncestorAxisIterator(final Object contextNode) throws UnsupportedAxisException {
return new AncestorAxisIterator(contextNode, this);
}
@Override
public Iterator> getFollowingSiblingAxisIterator(final Object contextNode) throws UnsupportedAxisException {
return new FollowingSiblingAxisIterator(contextNode, this);
}
@Override
public Iterator> getPrecedingSiblingAxisIterator(final Object contextNode) throws UnsupportedAxisException {
return new PrecedingSiblingAxisIterator(contextNode, this);
}
@Override
public Iterator> getFollowingAxisIterator(final Object contextNode) throws UnsupportedAxisException {
return new FollowingAxisIterator(contextNode, this);
}
@Override
public Iterator> getPrecedingAxisIterator(final Object contextNode) throws UnsupportedAxisException {
return new PrecedingAxisIterator(contextNode, this);
}
@Override
public Iterator getAttributeAxisIterator(final Object contextNode) {
if (contextNode instanceof Element) {
final Element element = (Element) contextNode;
return element.getAttributes().iterator();
}
return new ArrayList().iterator();
}
@SuppressWarnings("unused")
@Override
public Iterator> getNamespaceAxisIterator(final Object contextNode) throws UnsupportedAxisException {
return new ArrayList
© 2015 - 2025 Weber Informatics LLC | Privacy Policy