📄 luaparser.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 + -