【Java开源代码栏目提醒】:网学会员鉴于大家对Java开源代码十分关注,论文会员在此为大家搜集整理了“ActionTreeParser.java”一文,供大家参考学习
package msgrules;
import javax.jms.*;
import java.util.*;
import java.lang.reflect.*;
import java.io.*;
import java.beans.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
public class ActionTreeParser
{
public ActionTree parseTree(String script)
throws ParsingException
{
return parseTree(new StringReader(script));
}
public ActionTree parseTree(Reader reader)
throws ParsingException
{
ActionTree retVal = null;
DocumentBuilderFactory factory;
DocumentBuilder docBuilder;
Document doc;
Node treeElement;
try
{
factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
docBuilder = factory.newDocumentBuilder();
doc = docBuilder.parse(new InputSource(reader));
treeElement = doc.getDocumentElement();
retVal = parseActionTree(treeElement);
}
catch (Exception exp)
{
exp.printStackTrace();
throw new ParsingException();
}
return retVal;
}
public ActionTree parseActionTree(Node treeElement) throws Exception
{
ActionTree retVal = null;
Node curPair;
NodeList pairs;
int maxPairs,i;
QualifiedAction curAction;
try
{
retVal = new ActionTree();
pairs = treeElement.getChildNodes();
maxPairs = pairs.getLength();
for(i=0;i<maxPairs;i++)
{
curPair = pairs.item(i);
//Skip plain text
if(!"qualifiedaction".equals(curPair.getNodeName())) continue;
curAction = parseQualifiedAction(curPair);
if(curAction != null) retVal.addPair(curAction);
}
}
catch (Exception exp)
{
exp.printStackTrace();
throw new ParsingException();
}
return retVal;
}
public QualifiedAction parseQualifiedAction(Node node) throws Exception
{
Element qActionElement;
QualifiedAction retVal = null;
Node curNode;
String curName;
NodeList nodes;
int max,i;
Rule rule;
Action action;
if(node instanceof Element)
{
qActionElement = (Element)node;
retVal = new QualifiedAction();
nodes = qActionElement.getChildNodes();
max = nodes.getLength();
for(i=0;i<max;i++)
{
curNode = nodes.item(i);
curName = curNode.getNodeName();
if("rule".equals(curName))
{
rule = (Rule) parseRuleOrAction(curNode);
retVal.setRule(rule);
}
else if("rulegroup".equals(curName))
{
rule = parseRuleGroup(curNode);
retVal.setRule(rule);
}
else if("booleanrule".equals(curName))
{
rule = parseBooleanRule(curNode);
retVal.setRule(rule);
}
else if("action".equals(curName))
{
action = (Action) parseRuleOrAction(curNode);
retVal.setAction(action);
}
else if("actiongroup".equals(curName))
{
action = parseActionGroup(curNode);
retVal.setAction(action);
}
else if("actiontree".equals(curName))
{
action = parseActionTree(curNode);
retVal.setAction(action);
}
}
}
return retVal;
}
public Rule parseBooleanRule(Node node) throws Exception
{
Element element,param;
RuleGroup retVal = null;
Node curNode;
String curName;
NodeList nodes;
int max,i;
Rule rule;
String key,value;
Method method;
Object args[] = new Object[1];
if(node instanceof Element)
{
element = (Element)node;
retVal = new BooleanRule();
nodes = element.getChildNodes();
max = nodes.getLength();
for(i=0;i<max;i++)
{
curNode = nodes.item(i);
curName = curNode.getNodeName();
if("rule".equals(curName))
{
rule = (Rule) parseRuleOrAction(curNode);
retVal.addItem(rule);
}
else if("param".equals(curName))
{
param = (Element) curNode;
key = param.getAttribute("key");
value = param.getAttribute("value");
method = getWriteMethod(BooleanRule.class,key);
args[0] = value;
method.invoke(retVal, args);
}
}
}
return retVal;
}
public Rule parseRuleGroup(Node node) throws Exception
{
Element element,param;
RuleGroup retVal = null;
Node curNode;
String curName;
NodeList nodes;
int max,i;
Rule rule;
if(node instanceof Element)
{
element = (Element)node;
retVal = new RuleGroup();
nodes = element.getChildNodes();
max = nodes.getLength();
for(i=0;i<max;i++)
{
curNode = nodes.item(i);
curName = curNode.getNodeName();
if("rule".equals(curName))
{
rule = (Rule) parseRuleOrAction(curNode);
retVal.addItem(rule);
}
}
}
return retVal;
}
public Action parseActionGroup(Node node) throws Exception
{
Element element;
ActionGroup retVal = null;
Node curNode;
String curName;
NodeList nodes;
int max,i;
Action action;
if(node instanceof Element)
{
element = (Element)node;
retVal = new ActionGroup();
nodes = element.getChildNodes();
max = nodes.getLength();
for(i=0;i<max;i++)
{
curNode = nodes.item(i);
curName = curNode.getNodeName();
if("action".equals(curName))
{
action = (Action) parseRuleOrAction(curNode);
retVal.addItem(action);
}
else if("actiongroup".equals(curName))
{
action = parseActionGroup(curNode);
retVal.addItem(action);
}
else if("actiontree".equals(curName))
{
action = parseActionTree(curNode);
retVal.addItem(action);
}
}
}
return retVal;
}
public Object parseRuleOrAction(Node node) throws Exception
{
Element element,param;
Object retVal = null;
String type;
Class cls;
Node curNode;
String curName;
NodeList nodes;
int max,i;
String key,value;
上一篇:
ActionTree.java
下一篇:
法律专业开题报告范文