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

📄 graphtemplatecell.java

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

import java.io.ByteArrayOutputStream;
import java.util.Iterator;
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.DefaultPort;

import flow.graph.gui.graph.FlowGraphConstants;
import flow.graph.gui.graph.cell.ui.ModelForm;
import flow.graph.gui.graph.encoder.XMLEncoder;
import flow.graph.gui.graph.lua.gui.BlankForm;
import flow.graph.gui.graph.lua.gui.InvokeForm;
import flow.graph.gui.graph.lua.gui.WhileForm;
import flow.graph.gui.graph.lua.xml.InputParameter;
import flow.graph.gui.graph.lua.xml.InputParameters;
import flow.graph.gui.graph.lua.xml.Parameter;
import flow.graph.gui.graph.lua.xml.Parameters;
import flow.graph.gui.graph.lua.xml.TemplateConstants;

/**
 * @author Administrator
 *
 */
public class GraphTemplateCell extends DefaultGraphCell implements GraphTemplateEdit{
	public GraphTemplateCell(){
		super();
	}
	
	public GraphTemplateCell(String s){
		super(s);
	}
	
	public void EditCell(JGraph graph) {
		
		// TODO Auto-generated method stub
		if(FlowGraphConstants.getTemplateType(getAttributes()).toString().equals(TemplateConstants.INVOKE_TEMPLATE)){
			new InvokeForm(this, graph);
		}
		else if(FlowGraphConstants.getTemplateType(getAttributes()).toString().equals(TemplateConstants.CASE_TEMPLATE)){
			new WhileForm(this, graph);
		}
		else if(FlowGraphConstants.getTemplateType(getAttributes()).toString().equals(TemplateConstants.SWITCH_TEMPLATE)){
			//函数模板操作
			new InvokeForm(this, graph);
		}
		else if(FlowGraphConstants.getTemplateType(getAttributes()).toString().equals(TemplateConstants.WHILE_TEMPLATE)){
			//函数调用操作
			new WhileForm(this, graph);
		}
		else if(FlowGraphConstants.getTemplateType(getAttributes()).toString().equals(TemplateConstants.MODEL_TEMPLATE)){
			//函数调用操作
			new ModelForm(this, graph);
		}
		else if(FlowGraphConstants.getTemplateType(getAttributes()).toString().equals(TemplateConstants.BLANK_TEMPLATE)){
			//函数调用操作
			new BlankForm(this, graph);
		}
		
	}
	
	public static int loop = 0;
	//获取选中节点的所有前面节点的返回值
	public static Vector getResponseParameters(DefaultGraphCell cell){
		Vector cacheV = new Vector();
		//cacheV.addElement("");
		//if(loop >= 100)
		//	return cacheV;
		//loop++;
		
		//System.out.println("class:"+cell.getClass());
		if(cell != null){
			if(cell instanceof DefaultEdge){
				//System.out.println("edge..........1:"+cell);
				DefaultEdge edge = (DefaultEdge)cell;
				if(edge.getSource()!=null){
					//System.out.println("edge..........2");
					DefaultPort port = (DefaultPort)edge.getSource();
					if(port.getParent() != null){
						//System.out.println("edge..........3");
						Vector v = getResponseParameters(port);
						if(v != null){
							//System.out.println("edge..........4");
							for(int i=0;i<v.size();i++){
								cacheV.add(v.get(i));
							}
						}
					}
				}
			}
			else if(cell instanceof DefaultPort){
				//System.out.println("port1===========");
				if(cell.getParent() != null){
					//System.out.println("port2===========");
					DefaultGraphCell parent = (DefaultGraphCell)cell.getParent();
					Vector v = getResponseParameters(parent);
					if(v != null){
						//System.out.println("port3===========");
						for(int i=0;i<v.size();i++){
							cacheV.add(v.get(i));
						}
					}
				}
			}
			else if(cell instanceof GraphTemplateCell){
				//System.out.println("cell0-------------------"+cell);
				if(FlowGraphConstants.getOutputTemplate(cell.getAttributes()) != null){
					//System.out.println("cell1===========");
					Parameters ps = (Parameters)FlowGraphConstants.getOutputTemplate(cell.getAttributes());
					if(ps != null && FlowGraphConstants.getCellID(cell.getAttributes()) != null){
					//	System.out.println("cell2===========");
						for(int i=0;i<ps.getParameters().size();i++){
							Parameter p = (Parameter)ps.getParameters().get(i);
							//System.out.println(FlowGraphConstants.getCellID(cell.getAttributes()).toString()+"."+p.getName());
							cacheV.add(FlowGraphConstants.getCellID(cell.getAttributes()).toString()+"."+p.getName());
						}
					}
				}
				if(FlowGraphConstants.getTemplateType(cell.getAttributes()) != null){
					if(FlowGraphConstants.getTemplateType(cell.getAttributes()).toString().equals(TemplateConstants.GROUP_TEMPLATE)){
						//当是组的时候
						//找父节点
						if(cell.getChildCount() > 0){
							//System.out.println("cell3-------------------");
							for(int i=0;i<cell.getChildCount();i++){
								if(cell.getChildAt(i) instanceof DefaultPort){
									DefaultPort port = (DefaultPort)cell.getChildAt(i);
									if(port != null){
									//	System.out.println("cell4-------------------");
										Set set = port.getEdges();
										if(set != null){
										//	System.out.println("cell5-------------------");
											Iterator iter = set.iterator();
											while(iter.hasNext()){
											//	System.out.println("cell6-------------------");
												DefaultEdge edge = (DefaultEdge)iter.next();
												if(edge.getSource()==null) continue;
												if(((DefaultPort)edge.getSource()).getParent()==null) continue;
												if(((DefaultPort)edge.getSource()).getParent().equals(cell)){
													continue;
												}
												
												//System.out.println("cell7-------------------");
												Vector v = getResponseParameters(edge);
												if(v != null){
													//System.out.println("cell8-------------------");
													for(int j=0;j<v.size();j++){
													//	System.out.println("cell9-------------------");
														cacheV.add(v.get(j));
													}
												}
											}
										}
									}									
								}
							}
						}
					}
					else{
						//非组的时候
						if(cell.getParent() == null){
							//组外节点
							if(cell.getChildCount() > 0){
								//System.out.println("cell3-------------------");
								DefaultPort port = (DefaultPort)cell.getChildAt(0);
								if(port != null){
								//	System.out.println("cell4-------------------");
									Set set = port.getEdges();
									if(set != null){
									//	System.out.println("cell5-------------------");
										Iterator iter = set.iterator();
										while(iter.hasNext()){
										//	System.out.println("cell6-------------------");
											DefaultEdge edge = (DefaultEdge)iter.next();
											if(edge.getSource()==null) continue;
											if(((DefaultPort)edge.getSource()).getParent()==null) continue;
											if(((DefaultPort)edge.getSource()).getParent().equals(cell)){
												continue;
											}
											
											//System.out.println("cell7-------------------");
											Vector v = getResponseParameters(edge);
											if(v != null){
												//System.out.println("cell8-------------------");
												for(int j=0;j<v.size();j++){
												//	System.out.println("cell9-------------------");
													cacheV.add(v.get(j));
												}
											}
										}
									}
								}
							}
						}
						else{
							//组内节点
							Vector v = getGroupParameters(cell);
							if(v != null){
								//System.out.println("cell8-------------------");
								for(int j=0;j<v.size();j++){
								//	System.out.println("cell9-------------------");
									cacheV.add(v.get(j));
								}
							}
							Vector v1 = getResponseParameters((DefaultGraphCell)cell.getParent());
							if(v1 != null){
								//System.out.println("cell8-------------------");
								for(int j=0;j<v1.size();j++){
								//	System.out.println("cell9-------------------");
									cacheV.add(v1.get(j));
								}
							}
						}
					}
				}				
			}
		}
		
		return cacheV;
	}
	
	public static Vector getGroupParameters(DefaultGraphCell cell){
		Vector cacheV = new Vector();

		if(cell != null){
			if(cell instanceof DefaultEdge){
				//System.out.println("edge..........1:"+cell);
				DefaultEdge edge = (DefaultEdge)cell;
				if(edge.getSource()!=null){
					//System.out.println("edge..........2");
					DefaultPort port = (DefaultPort)edge.getSource();
					if(port.getParent() != null){
						//System.out.println("edge..........3");
						Vector v = getResponseParameters(port);
						if(v != null){
							//System.out.println("edge..........4");
							for(int i=0;i<v.size();i++){
								cacheV.add(v.get(i));
							}
						}
					}
				}
			}
			else if(cell instanceof DefaultPort){
				//System.out.println("port1===========");
				if(cell.getParent() != null){
					//System.out.println("port2===========");
					DefaultGraphCell parent = (DefaultGraphCell)cell.getParent();
					Vector v = getResponseParameters(parent);
					if(v != null){
						//System.out.println("port3===========");
						for(int i=0;i<v.size();i++){
							cacheV.add(v.get(i));
						}
					}
				}
			}
			else if(cell instanceof GraphTemplateCell){
				//System.out.println("cell0-------------------"+cell);
				if(FlowGraphConstants.getOutputTemplate(cell.getAttributes()) != null){
					//System.out.println("cell1===========");
					Parameters ps = (Parameters)FlowGraphConstants.getOutputTemplate(cell.getAttributes());
					if(ps != null && FlowGraphConstants.getCellID(cell.getAttributes()) != null){
					//	System.out.println("cell2===========");
						for(int i=0;i<ps.getParameters().size();i++){
							Parameter p = (Parameter)ps.getParameters().get(i);
							//System.out.println(FlowGraphConstants.getCellID(cell.getAttributes()).toString()+"."+p.getName());
							cacheV.add(FlowGraphConstants.getCellID(cell.getAttributes()).toString()+"."+p.getName());
						}
					}
				}
				if(cell.getChildCount() > 0){
					//System.out.println("cell3-------------------");
					DefaultPort port = (DefaultPort)cell.getChildAt(0);
					if(port != null){
					//	System.out.println("cell4-------------------");
						Set set = port.getEdges();
						if(set != null){
						//	System.out.println("cell5-------------------");
							Iterator iter = set.iterator();
							while(iter.hasNext()){
							//	System.out.println("cell6-------------------");
								DefaultEdge edge = (DefaultEdge)iter.next();
								if(edge.getSource()==null) continue;
								if(((DefaultPort)edge.getSource()).getParent()==null) continue;
								if(((DefaultPort)edge.getSource()).getParent().equals(cell)){
									continue;
								}
								
								//System.out.println("cell7-------------------");
								Vector v = getResponseParameters(edge);
								if(v != null){
									//System.out.println("cell8-------------------");
									for(int j=0;j<v.size();j++){
									//	System.out.println("cell9-------------------");
										cacheV.add(v.get(j));
									}
								}
							}
						}
					}
				}
			}
		}
		return cacheV;
	}
	
	public static Vector getParameters(DefaultGraphCell cell){
		//PrintGraphCell(cell);
		Vector cacheV = new Vector();

		System.out.println("cell:"+cell.getClass()+", name="+cell);
		if(cell != null){
			if(cell instanceof GraphTemplateCell){
				DefaultPort port = (DefaultPort)cell.getChildAt(0);
				Set set = port.getEdges();
				Iterator iter = set.iterator();
				//System.out.println("cell="+cell);
				while(iter.hasNext()){
					DefaultEdge edge = (DefaultEdge)iter.next();
					//System.out.println("null================0:"+edge);
					if(edge.getSource() == null){
					//	System.out.println("null================1");
						continue;
					}
					if(((DefaultPort)edge.getSource()).getParent() == null){
					//	System.out.println("null================2");
						continue;
					}
					if(((DefaultPort)edge.getSource()).getParent().equals(cell)){
						//iter.next();
						continue;
					}
					Vector v = (Vector)GraphTemplateCell.getResponseParameters((DefaultGraphCell)edge);
					for(int i=0;i<v.size();i++){
						cacheV.add(v.get(i));
					}
				}
			}
		}
		return cacheV;
	}
	
	//==============================================================
	//找参数入口函数
	public static Vector getSourceParameter(DefaultGraphCell cell){
		Vector cacheV = new Vector();
		if(cell != null){
			if(cell instanceof DefaultEdge){
				DefaultEdge edge1 = (DefaultEdge)cell;
				if(edge1.getSource() != null){
					if(((DefaultPort)edge1.getSource()).getParent() != null){
						DefaultGraphCell cell1 = (DefaultGraphCell)(((DefaultPort)edge1.getSource()).getParent());
						if(cell1.getParent() == null){
							//System.out.println("1-----------------");
							//组外成员
							for(int k=0;k<cell1.getChildCount();k++){
								if(cell1.getChildAt(k) instanceof DefaultPort){
									DefaultPort port = (DefaultPort)cell1.getChildAt(k);
									Set set = port.getEdges();
									Iterator iter = set.iterator();
									//System.out.println("cell="+cell);
									while(iter.hasNext()){
										DefaultEdge edge = (DefaultEdge)iter.next();
										//System.out.println("null================0:"+edge);
										if(edge.getSource() == null){
										//	System.out.println("null================1");

⌨️ 快捷键说明

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