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

📄 stepeditor.java

📁 一个很好实用的工作流OSWORKFLOW开发例子.有着非常优秀的灵活性.
💻 JAVA
字号:
package com.opensymphony.workflow.designer.editor;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;import javax.swing.*;import com.jgoodies.forms.builder.PanelBuilder;import com.jgoodies.forms.layout.CellConstraints;import com.jgoodies.forms.layout.FormLayout;import com.opensymphony.workflow.designer.dialogs.AttributeDialog;import com.opensymphony.workflow.designer.WorkflowDesigner;import com.opensymphony.workflow.designer.UIFactory;import com.opensymphony.workflow.designer.ResourceManager;import com.opensymphony.workflow.designer.beanutils.BeanConnector;import com.opensymphony.workflow.designer.model.ConditionsTableModel;import com.opensymphony.workflow.designer.model.FunctionsTableModel;import com.opensymphony.workflow.designer.model.AttributesTableModel;import com.opensymphony.workflow.loader.*;public class StepEditor extends DetailPanel implements ActionListener{  private static final String[] BUTTONS = new String[]{"add", "remove", "edit"};  private JTextField id = UIFactory.createReadOnlyTextField(12);  private JTextField name = new JTextField(12);  private JTextField view = new JTextField(12);  private JComboBox restrict = new JComboBox(new String[]{"AND", "OR"});  private ConditionsTableModel conditionsModel = new ConditionsTableModel();  private JTable conditionsTable;  private FunctionsTableModel preModel = new FunctionsTableModel();  private JTable pre;  private FunctionsTableModel postModel = new FunctionsTableModel();  private JTable post;	private AttributesTableModel attributesModel = new AttributesTableModel();	private JTable attributesTable;	  private BeanConnector connector = new BeanConnector();  public StepEditor()  {  }  protected void initComponents()  {		String colLayout = "2dlu, max(32dlu;pref), 2dlu, pref:grow, 4dlu";		String rowLayout = "4dlu, pref, 2dlu, pref, 2dlu, pref, 2dlu, pref, 2dlu, pref";		FormLayout layout = new FormLayout("2dlu, pref:grow, 2dlu", "2dlu, pref, 2dlu");		PanelBuilder builder = new PanelBuilder(this, layout);		JTabbedPane tabbedPane = new JTabbedPane();    CellConstraints cc = new CellConstraints();    // Tab1 (Info)		FormLayout layoutInfo = new FormLayout(colLayout, rowLayout);		JPanel panelInfo = new JPanel();		PanelBuilder builderInfo = new PanelBuilder(panelInfo, layoutInfo);    builderInfo.addLabel(ResourceManager.getString("id"), cc.xy(2, 2));    connector.connect(id, "id");    builderInfo.add(id, cc.xy(4, 2));    builderInfo.addLabel(ResourceManager.getString("name"), cc.xy(2, 4));    connector.connect(name, "name");    builderInfo.add(name, cc.xy(4, 4));    builderInfo.addLabel(ResourceManager.getString("view"), cc.xy(2, 6));    connector.connect(view, "actions[0].view");    builderInfo.add(view, cc.xy(4, 6));    /*    builderInfo.addLabel(ResourceManager.getString("auto"), cc.xy(2, 8));    connector.connect(auto, "actions[0].autoExecute");    builderInfo.add(auto, cc.xy(4, 8));		*/		tabbedPane.add(ResourceManager.getString("info"), panelInfo);		///////////////////////////		// Tab2 (meta attributes)		///////////////////////////		FormLayout layoutAttrib = new FormLayout(colLayout, rowLayout);		JPanel panelAttrib = new JPanel();		PanelBuilder builderAttrib = new PanelBuilder(panelAttrib, layoutAttrib);		attributesTable = new JTable(attributesModel);		attributesTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);		builderAttrib.add(UIFactory.createTablePanel(attributesTable), cc.xywh(2, 2, 3, 1));		// 2, 15, 3, 1		builderAttrib.add(UIFactory.getAddRemovePropertiesBar(this, "attribute", BUTTONS), cc.xywh(2, 4, 3, 1));	// 2, 16, 3, 1		tabbedPane.add(ResourceManager.getString("attributes"), panelAttrib);				/////////////////////////////		// Tab3 (Permissions)		/////////////////////////////		FormLayout layoutPerm = new FormLayout(colLayout, rowLayout);		JPanel panelPerm = new JPanel();		PanelBuilder builderPerm = new PanelBuilder(panelPerm, layoutPerm);    builderPerm.addLabel(ResourceManager.getString("type"), cc.xy(2, 2));    connector.connect(restrict, "restriction/conditionType");    builderPerm.add(restrict, cc.xy(4, 2));    conditionsTable = new JTable(conditionsModel);    conditionsTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);    conditionsModel.setType(ConditionsTableModel.PERMISSION);    conditionsModel.setGraphModel(getModel());    builderPerm.add(UIFactory.createTablePanel(conditionsTable), cc.xywh(2, 4, 3, 1));    builderPerm.add(UIFactory.getAddRemovePropertiesBar(this, "permission", BUTTONS), cc.xywh(2, 6, 3, 1));		tabbedPane.add(ResourceManager.getString("permissions"), panelPerm);		/////////////////////////////		// Tab4 (pre-functions)		/////////////////////////////		FormLayout layoutPrefunc = new FormLayout(colLayout, rowLayout);		JPanel panelPrefunc = new JPanel();		PanelBuilder builderPrefunc = new PanelBuilder(panelPrefunc, layoutPrefunc);    pre = new JTable(preModel);    pre.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);    preModel.setGraphModel(getModel());    builderPrefunc.add(UIFactory.createTablePanel(pre), cc.xywh(2, 2, 3, 1));    builderPrefunc.add(UIFactory.getAddRemovePropertiesBar(this, "pre", BUTTONS), cc.xywh(2, 4, 3, 1));		tabbedPane.add(ResourceManager.getString("prefunctions"), panelPrefunc);		/////////////////////////////		// Tab5 (post-functions)		/////////////////////////////		FormLayout layoutPostfunc = new FormLayout(colLayout, rowLayout);		JPanel panelPostfunc = new JPanel();		PanelBuilder builderPostfunc = new PanelBuilder(panelPostfunc, layoutPostfunc);    post = new JTable(postModel);    post.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);    postModel.setGraphModel(getModel());    builderPostfunc.add(UIFactory.createTablePanel(post), cc.xywh(2, 2, 3, 1));    builderPostfunc.add(UIFactory.getAddRemovePropertiesBar(this, "post", BUTTONS), cc.xywh(2, 4, 3, 1));    tabbedPane.add(ResourceManager.getString("postfunctions"), panelPostfunc);		builder.add(tabbedPane, cc.xy(2,2));  }  public void actionPerformed(ActionEvent e)  {    String command = e.getActionCommand().toLowerCase();		if(command.equals("attributeadd"))		{			attributeadd();		}		else if(command.equals("attributeremove"))		{			attributeremove();		}		else if(command.equals("attributeedit"))    {			attributemodify();		}    else if(command.equals("permissionadd"))    {      //add();    }    else if(command.equals("permissionremove"))    {      //remove();    }    else if(command.equals("permissionedit"))    {      //modify();    }    else if(command.equals("preadd"))    {      preadd();    }    else if(command.equals("preremove"))    {      preremove();    }    else if(command.equals("preedit"))    {      premodify();    }    else if(command.equals("postadd"))    {      postadd();    }    else if(command.equals("postremove"))    {      postremove();    }    else if(command.equals("postedit"))    {      postmodify();    }  }  public String getTitle()  {    return ResourceManager.getString("title.step", new Object[]{id.getText()});  }  protected void viewClosed()  {    if(conditionsTable.isEditing())    {      conditionsTable.getCellEditor().stopCellEditing();    }    if (pre.isEditing())    {    	pre.getCellEditor().stopCellEditing();    }    if (post.isEditing())    {    	post.getCellEditor().stopCellEditing();    }    if (attributesTable.isEditing())    {    	attributesTable.getCellEditor().stopCellEditing();    }  }	/*  protected void updateView()  {    StepDescriptor stepDescriptor = (StepDescriptor)getDescriptor();				ActionDescriptor firstAction;    //todo need to do this in some way that handles multiple actions    if(stepDescriptor.getActions().size()>0)    {      firstAction = (ActionDescriptor)stepDescriptor.getActions().get(0);    }    else    {      firstAction = null;    }    if(firstAction!=null)    {      RestrictionDescriptor rd = firstAction.getRestriction();      if(rd==null)      {        rd = new RestrictionDescriptor();        rd.setParent(firstAction);        ConditionsDescriptor conditions = new ConditionsDescriptor();        rd.getConditions().add(conditions);        conditions.setParent(rd);        conditions.setType((String)restrict.getSelectedItem());        firstAction.setRestriction(rd);      }      //todo no nested conditions allowed      conditionsModel.setList(((ConditionsDescriptor)rd.getConditions().get(0)).getConditions());    }    else    {      conditionsModel.setList(new ArrayList());    }    conditionsTable.getSelectionModel().clearSelection();    preModel.setList(firstAction==null ? new ArrayList() : firstAction.getPreFunctions());    pre.getSelectionModel().clearSelection();    postModel.setList(firstAction==null ? new ArrayList() : firstAction.getPostFunctions());    post.getSelectionModel().clearSelection();    connector.setSource(stepDescriptor);  }	*/  protected void updateView()  {		StepDescriptor stepDescriptor = (StepDescriptor)getDescriptor();    ActionDescriptor firstAction;    //todo need to do this in some way that handles multiple actions    if(stepDescriptor.getActions().size()>0)    {      firstAction = (ActionDescriptor)stepDescriptor.getActions().get(0);    }    else    {      firstAction = null;    }    if(firstAction!=null)    {      RestrictionDescriptor rd = firstAction.getRestriction();      if(rd==null)      {        rd = new RestrictionDescriptor();        rd.setParent(firstAction);        ConditionsDescriptor conditions = DescriptorFactory.getFactory().createConditionsDescriptor();        rd.setConditionsDescriptor(conditions);        conditions.setParent(rd);        conditions.setType((String)restrict.getSelectedItem());        firstAction.setRestriction(rd);      }      //todo no nested conditions allowed      conditionsModel.setList(rd.getConditionsDescriptor().getConditions());    }    else    {      conditionsModel.setList(new ArrayList());    }				// prova kap		conditionsModel.setList(stepDescriptor.getPermissions()); 		// fine prova kap		    conditionsTable.getSelectionModel().clearSelection();    preModel.setList(firstAction==null ? new ArrayList() : firstAction.getPreFunctions());    pre.getSelectionModel().clearSelection();    postModel.setList(firstAction==null ? new ArrayList() : firstAction.getPostFunctions());    post.getSelectionModel().clearSelection();		attributesModel.setMap(stepDescriptor.getMetaAttributes());		attributesTable.getSelectionModel().clearSelection();		    connector.setSource(stepDescriptor);  }	private void attributeadd()	{		AttributeDialog dlg = new AttributeDialog(WorkflowDesigner.INSTANCE, "", "", true);		if (dlg.ask(WorkflowDesigner.INSTANCE))		{			String sKey = dlg.keyField.getText();			String sValue = dlg.valueField.getText();			if (sKey.length()>0)			{				attributesModel.add(sKey, sValue);			}		}	}	private void attributeremove()	{		int[] rows = attributesTable.getSelectedRows();		for(int i = 0; i < rows.length; i++)		{			String sKey = (String)attributesModel.getValueAt(rows[i], 0);			attributesModel.remove(sKey);		}			}	private void attributemodify()	{		int[] rows = attributesTable.getSelectedRows();		for(int i = 0; i < rows.length; i++)		{			attributemodify(rows[i]);		}	}	private void attributemodify(int selected)	{		String sKey = (String)attributesModel.getValueAt(selected, 0);		String sValue = (String)attributesModel.getValueAt(selected, 1);		if ((sKey!=null)&&(sKey.length()>0))		{			AttributeDialog dlg = new AttributeDialog(WorkflowDesigner.INSTANCE, sKey, sValue, false);			if (dlg.ask(WorkflowDesigner.INSTANCE))			{				sValue = dlg.valueField.getText();				attributesModel.add(sKey, sValue);			}		}	}	  private void preadd()  {    StepFunctionEditor editor = new StepFunctionEditor((StepDescriptor)getDescriptor());    editor.setModel(getModel());    FunctionDescriptor func = editor.add();    if(func != null)    {      preModel.add(func);    }  }  private void preremove()  {    int[] rows = pre.getSelectedRows();    for(int i = 0; i < rows.length; i++)    {      preModel.remove(rows[i]);    }  }  private void premodify()  {    int[] rows = pre.getSelectedRows();    for(int i = 0; i < rows.length; i++)    {      premodify(rows[i]);    }  }  private void premodify(int selected)  {    FunctionDescriptor func = (FunctionDescriptor)preModel.get(selected);    StepFunctionEditor editor = new StepFunctionEditor((StepDescriptor)getDescriptor());    editor.setModel(getModel());    editor.modify(func);    preModel.fireTableDataChanged();  }  private void postadd()  {    StepFunctionEditor editor = new StepFunctionEditor((StepDescriptor)getDescriptor());    editor.setModel(getModel());    FunctionDescriptor func = editor.add();    if(func != null)    {      postModel.add(func);    }  }  private void postremove()  {    int[] rows = post.getSelectedRows();    for(int i = 0; i < rows.length; i++)    {      postModel.remove(rows[i]);    }  }  private void postmodify()  {    int[] rows = post.getSelectedRows();    for(int i = 0; i < rows.length; i++)    {      postmodify(rows[i]);    }  }  private void postmodify(int selected)  {    FunctionDescriptor func = (FunctionDescriptor)postModel.get(selected);    StepFunctionEditor editor = new StepFunctionEditor((StepDescriptor)getDescriptor());    editor.setModel(getModel());    editor.modify(func);    postModel.fireTableDataChanged();  }}

⌨️ 快捷键说明

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