📄 knowledgeparser.java
字号:
/**
* Description: For parsing a knowledge element
*
* @ Author Create/Modi Note
* Xiaofeng Xie Oct 06, 2006
*
* @version 1.0
*/
package maosKernel.infoIO.parser;
import Global.basic.nodes.*;
import Global.basic.nodes.utilities.*;
import Global.system.*;
import maosKernel.*;
import maosKernel.represent.*;
import maosKernel.represent.landscape.*;
import Global.basic.nodes.loader.*;
public class KnowledgeParser {
private AbsUtilSetNodeLoader utilSetNodeLoader = new CoverUtilSetNodeLoader();
private String REFER_TAG = "&";
private boolean isReferName(String nodeName) {
return (nodeName.startsWith(REFER_TAG));
}
private String getReferName(String nodeName) {
return nodeName.substring(REFER_TAG.length(), nodeName.length());
}
public AbsInformationElement getClonedKnowledgeNode(AbsInformationElement knowledgeNode) throws Exception {
AbsInformationElement clonedKnowledgeNode = createInformationNode(knowledgeNode.getKey());
clonedKnowledgeNode.importCopiedOperStructure(knowledgeNode);
return clonedKnowledgeNode;
}
public AbsInformationElement parseLine(String objLine, KnowledgeContainer knowledgeContainer, AbsLandscape virtualLandscape) throws Exception {
GradedOut.showNORMALMessage("Parse: \""+objLine+"\"");
AbsInformationElement knowledgeNode = null;
if (isReferName(objLine)) {
String nodeName = getReferName(objLine);
knowledgeNode = knowledgeContainer.getElement(nodeName);
if (knowledgeNode==null) throw new Exception("Cannot find the referred node: "+nodeName);
} else {
UtilSetNode node = new UtilSetNode();
utilSetNodeLoader.loadUtilSetNode(node, objLine);
knowledgeNode = createInformationNode(node, knowledgeContainer);
if (knowledgeNode instanceof ISetLandscapeInfoEngine) {
((ISetLandscapeInfoEngine)knowledgeNode).setInfo(virtualLandscape);
}
knowledgeContainer.putElement(knowledgeNode);
}
return knowledgeNode;
}
public AbsInformationElement seekInformationNode(String name, String[] objLines, KnowledgeContainer knowledgeContainer) {
UtilSetNode infoNode = seekUtilSetNode(name, objLines);
if (infoNode==null) return null;
try {
return createInformationNode(infoNode, knowledgeContainer);
} catch (Exception e) {
return null;
}
}
public UtilSetNode seekUtilSetNode(String name, String[] objLines) {
for (int i=0; i<objLines.length; i++) {
UtilSetNode node = new UtilSetNode();
utilSetNodeLoader.loadUtilSetNode(node, objLines[i]);
if (node.getName().equalsIgnoreCase(name)) return node;
}
return null;
}
public AbsInformationElement createInformationNode(String nodeKey) throws Exception {
AbsInformationElement knowledgeNode = (AbsInformationElement)ProcMethod.createObject(nodeKey);
knowledgeNode.initUtilities();
return knowledgeNode;
}
public AbsInformationElement createInformationNode(UtilSetNode infoNode, KnowledgeContainer knowledgeContainer) throws Exception {
AbsInformationElement knowledgeNode = createInformationNode(infoNode.getKey());
knowledgeNode.setName(infoNode.getName());
for (int i=0; i<infoNode.getUtilitiesSize(); i++) {
BasicUtility utility = infoNode.getUtilityAt(i);
int index = knowledgeNode.getUtilityIndex(utility.getName());
if (index==-1) {
System.out.println("Cannot find the specified utility: "+utility.getName());
continue;
}
String value = utility.getValue().toString();
Object realValue = utility.getValue();
if (isReferName(value)) realValue = knowledgeContainer.getElement(getReferName(value));
knowledgeNode.getUtilityAt(index).setValue(realValue);
}
knowledgeNode.shortcutInit();
return knowledgeNode;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -