package org.firesoa.common.jxpath;
import java.util.List;
import org.apache.commons.jxpath.AbstractFactory;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.xml.DocumentContainer;
import org.dom4j.Attribute;
import org.dom4j.CDATA;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Text;
import org.firesoa.common.jxpath.model.dom4j.Dom4JFactory;
import org.firesoa.common.jxpath.model.dom4j.Dom4JParser;
public class Dom4JTest extends XMLModelTestCase {
public void testID(){
}
@Override
protected String getModel() {
DocumentContainer.registerXMLParser("DOM4J", new Dom4JParser());
return "DOM4J";
}
public void testGetNode() {
assertXPathNodeType(context, "/", Document.class);
assertXPathNodeType(context, "/vendor/location", Element.class);
assertXPathNodeType(context, "//location/@name", Attribute.class);
assertXPathNodeType(context, "//vendor", Element.class); //bugzilla #38586
System.out.println(context.getValue("/"));
System.out.println(context.getValue("/vendor[1]"));
System.out.println(context.getValue("/vendor[1]/contact[1]"));
System.out.println(context.getValue("/vendor[1]/location[1]/address/street"));
System.out.println(context.getValue("/vendor[1]/location[1]/@name"));
System.out.println(context.getValue("/vendor[1]/location[1]/@id"));
}
public void testGetElementDescendantOrSelf() {
JXPathContext childContext = context.getRelativeContext(context.getPointer("/vendor"));
assertTrue(childContext.getContextBean() instanceof Element);
assertXPathNodeType(childContext, "//vendor", Element.class);
}
@Override
protected AbstractFactory getAbstractFactory() {
return new Dom4JFactory();
}
@Override
protected String getXMLSignature(Object node, boolean elements,
boolean attributes, boolean text, boolean pi) {
StringBuffer buffer = new StringBuffer();
appendXMLSignature(buffer, node, elements, attributes, text, pi);
return buffer.toString();
}
private void appendXMLSignature(
StringBuffer buffer,
Object object,
boolean elements,
boolean attributes,
boolean text,
boolean pi)
{
if (object instanceof Document) {
buffer.append("<D>");
appendXMLSignature(
buffer,
((Document) object).content(),
elements,
attributes,
text,
pi);
buffer.append("</D");
}
else if (object instanceof Element) {
String tag = elements ? ((Element) object).getName() : "E";
buffer.append("<");
buffer.append(tag);
buffer.append(">");
appendXMLSignature(
buffer,
((Element) object).content(),
elements,
attributes,
text,
pi);
buffer.append("</");
buffer.append(tag);
buffer.append(">");
}
else if (object instanceof Text || object instanceof CDATA) {
if (text) {
String string = ((Text) object).getText();
string = string.replace('\n', '=');
buffer.append(string);
}
}
}
private void appendXMLSignature(
StringBuffer buffer,
List children,
boolean elements,
boolean attributes,
boolean text,
boolean pi)
{
for (int i = 0; i < children.size(); i++) {
appendXMLSignature(
buffer,
children.get(i),
elements,
attributes,
text,
pi);
}
}
}