⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 knowledgeparser.java

📁 pso源程序
💻 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 + -