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

📄 luaparser.java

📁 JGraph扩展应用。自定义Renderer,自定义视图View实现自定义工作流控件
💻 JAVA
字号:
/**
 * 
 */
package flow.graph.gui.graph.lua.code;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Vector;

import org.jgraph.JGraph;
import org.jgraph.graph.DefaultEdge;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.DefaultGraphModel;
import org.jgraph.graph.DefaultPort;

import flow.graph.gui.graph.FlowGraphConstants;
import flow.graph.gui.graph.lua.xml.TemplateConstants;

/**
 * @author Administrator
 *
 */
public class LuaParser {
	private String defineCode = "";
	private String executeCode = "";
	private Hashtable stackTable = new Hashtable();
	private Vector codeStack = new Vector();
	private String tempCode = "";
	private JGraph graph;
	
	public LuaParser(JGraph graph){
		this.graph = graph;
		if(graph != null){
			if(graph.getRoots().length > 0){
				Object[] cells = graph.getRoots();
				
				//解析自定义函数部分
				for(int i=0;i<cells.length;i++){
					DefaultGraphCell cell = (DefaultGraphCell)cells[i];
					if(FlowGraphConstants.getTemplateType(cell.getAttributes()) != null){
						if(FlowGraphConstants.getTemplateType(cell.getAttributes()).toString().equals(TemplateConstants.MODEL_TEMPLATE)){
							//函数模板节点
							defineCode += "\n"+new LuaFunctionParse(cell).getCode()+"\n";
						}
					}
				}
				
				//从开始节点开始解析流程部分
				for(int i=0;i<cells.length;i++){
					//找到Start节点
					DefaultGraphCell cell = (DefaultGraphCell)cells[i];
					if(FlowGraphConstants.getTemplateType(cell.getAttributes()) != null){
						if(FlowGraphConstants.getTemplateType(cell.getAttributes()).toString().equals(TemplateConstants.START_TEMPLATE)){
							//找到开始节点
							//开始按流程解析各个元素的Lua代码
							DefaultEdge edge = getFirstSourceEdge(cell);
							if(edge != null){
								//找到边
								
							}
						}
					}
				}
			}
		}
	}
	
	private DefaultEdge getFirstSourceEdge(DefaultGraphCell cell){
		if(cell != null){
			for(int i=0;i<cell.getChildCount();i++){
				if(cell.getChildAt(i) instanceof DefaultPort){
					DefaultPort port = (DefaultPort)cell.getChildAt(i);
					if(port != null){
						Set set = port.getEdges();
						Iterator iter = set.iterator();
						while(iter.hasNext()){
							DefaultEdge edge = (DefaultEdge)iter.next();
							if(edge.getSource().equals(cell))
								return edge;
						}
					}
				}
			}
		}
		return null;
	}
	
	private List getAllSourceEdge(DefaultGraphCell cell){
		List list = new ArrayList();
		if(cell != null){
			for(int i=0;i<cell.getChildCount();i++){
				if(cell.getChildAt(i) instanceof DefaultPort){
					DefaultPort port = (DefaultPort)cell.getChildAt(i);
					if(port != null){
						Set set = port.getEdges();
						Iterator iter = set.iterator();
						while(iter.hasNext()){
							DefaultEdge edge = (DefaultEdge)iter.next();
							if(edge.getSource().equals(cell))
								list.add(edge);
						}
					}
				}
			}
		}
		return list;
	}

	private Vector parse(DefaultGraphCell cell){
		Vector cacheV = new Vector();

		if(cell != null){
			if(cell instanceof DefaultPort){
				//点
				//找parent
				DefaultPort port = (DefaultPort)cell;
				if(port.getParent() != null){
					DefaultGraphCell parent = (DefaultGraphCell)port.getParent();
					parse(parent);
				}
			}
			else if(cell instanceof DefaultEdge){
				//线
				//判断来源类型
				int type = 0;
				DefaultEdge edge = (DefaultEdge)cell;
				if(edge.getSource() != null){
					DefaultPort port = (DefaultPort)edge.getSource();
					if(port.getParent() != null){
						DefaultGraphCell parent = (DefaultGraphCell)port.getParent();
						if(FlowGraphConstants.getTemplateType(parent.getAttributes()) != null){
							if(FlowGraphConstants.getTemplateType(parent.getAttributes()).toString().equals(TemplateConstants.SWITCH_TEMPLATE)){
								type = 1;
							}
						}
					}
				}
				//普通连线
				if(type == 0){
					//.........1
					LuaExtendsParse parse = new LuaExtendsParse(cell);
					executeCode += "\n"+parse.getDiscriptionCode();
					executeCode += "\n" +parse.getExecuteCode();
				}
				else if(type == 1){
					//条件判断连线
					LuaCaseParse parse = new LuaCaseParse(cell);
					defineCode += "\n"+parse.getDiscriptionCode();
					defineCode += "\n"+parse.getDefineCode();
					executeCode += "\n"+parse.getDiscriptionCode();
					executeCode += "\n" +parse.getExecuteCode();
				}
				//找port
				if(edge.getTarget() != null){
					DefaultPort port = (DefaultPort)edge.getTarget();
					parse(port);
				}
			}
			else if(cell instanceof DefaultGraphCell){
				if(DefaultGraphModel.isGroup(graph.getModel(), cell)){
					//组
				}
				else{
					//元素
					if(FlowGraphConstants.getTemplateType(cell.getAttributes()) != null){
						String type = FlowGraphConstants.getTemplateType(cell.getAttributes()).toString();
						if(type.equals(TemplateConstants.INVOKE_TEMPLATE)){
							//函数调用
						}
						else if(type.equals(TemplateConstants.WHILE_TEMPLATE)){
							//循环
							LuaWhileParse parse = new LuaWhileParse(cell);
							executeCode += "\n"+parse.getExecuteCode();
							stackTable.put("WHILE", parse);
							
							DefaultEdge edge = getFirstSourceEdge(cell);
							parse(edge);
						}
						else if(type.equals(TemplateConstants.SWITCH_TEMPLATE)){
							//条件判断
						}
						else{
							//...
						}
					}
				}
			}
		}
		
		return cacheV;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -