package org.fireflow.engine.modules.script;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.Pointer;
import org.apache.commons.jxpath.ri.JXPathContextReferenceImpl;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.firesoa.common.jxpath.model.dom4j.Dom4JFactory;
import org.firesoa.common.jxpath.model.dom4j.Dom4JPointerFactory;
public class Dom4JFactoryTest {
public static void main(String[] args) {
Map<String, Map<String, Object>> jxpathRoot = new HashMap<String, Map<String, Object>>();
jxpathRoot.put(ScriptContextVariableNames.INPUTS,
new HashMap<String, Object>());
jxpathRoot.put(ScriptContextVariableNames.PROCESS_VARIABLES,
new HashMap<String, Object>());
jxpathRoot.put(ScriptContextVariableNames.ACTIVITY_VARIABLES,
new HashMap<String, Object>());
jxpathRoot.put(ScriptContextVariableNames.SESSION_ATTRIBUTES,
new HashMap<String, Object>());
JXPathContextReferenceImpl
.addNodePointerFactory(new Dom4JPointerFactory());
JXPathContext jxpathContext = JXPathContext.newContext(jxpathRoot);
jxpathContext.setFactory(new TempDom4JFactory());//初始化构造函数
jxpathContext.registerNamespace("ns1", "http://test/");
jxpathContext.createPathAndSetValue("/inputs/mapValue", "value123");
System.out.println(jxpathRoot.get("inputs"));
jxpathContext.createPathAndSetValue("/inputs/dom4jDoc/where_fields/id",
"123");
System.out.println(jxpathRoot.get("inputs"));
Document dom4jDoc = (Document)jxpathRoot.get("inputs").get("dom4jDoc");
System.out.println(dom4jDoc.asXML());
jxpathContext.createPathAndSetValue("/inputs/dom4jDoc/where_fields/id",
"234");
jxpathContext.createPathAndSetValue("/inputs/dom4jDoc/where_fields/state",
"789");
System.out.println(dom4jDoc.asXML());
}
}
class TempDom4JFactory extends Dom4JFactory {
public boolean createObject(JXPathContext context, Pointer pointer,
Object parent, String name, int index) {
if (parent instanceof Map){
//TODO 剩下的问题是如何初始化Document
DocumentFactory dom4jFactory = DocumentFactory.getInstance();
Document dom4jDoc = dom4jFactory.createDocument();
((Map)parent).put(name, dom4jDoc);
return true;
}else{
return super.createObject(context, pointer, parent, name, index);
}
}
}