WorkflowEditor.java :  » Workflow-Engines » OSWorkflow » com » opensymphony » workflow » designer » editor » Java Open Source

Java Open Source » Workflow Engines » OSWorkflow 
OSWorkflow » com » opensymphony » workflow » designer » editor » WorkflowEditor.java
package com.opensymphony.workflow.designer.editor;

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.builder.PanelBuilder;
import com.opensymphony.workflow.designer.dialogs.AttributeDialog;
import com.opensymphony.workflow.designer.WorkflowDesigner;
import com.opensymphony.workflow.designer.UIFactory;
import com.opensymphony.workflow.designer.Utils; 
import com.opensymphony.workflow.designer.ResourceManager;
import com.opensymphony.workflow.designer.beanutils.BeanConnector;
import com.opensymphony.workflow.designer.model.AttributesTableModel;
import com.opensymphony.workflow.designer.model.RegistersTableModel;
import com.opensymphony.workflow.designer.model.TriggersTableModel;
import com.opensymphony.workflow.loader.WorkflowDescriptor;
import com.opensymphony.workflow.loader.RegisterDescriptor;
import com.opensymphony.workflow.loader.FunctionDescriptor;


public class WorkflowEditor extends DetailPanel implements ActionListener
{
  private static final String[] BUTTONS = new String[]{"add", "remove", "edit"};
  private JTextField name = new JTextField();
  
  private AttributesTableModel attributesModel = new AttributesTableModel();
  private JTable attributesTable;

  private RegistersTableModel registersModel = new RegistersTableModel();
  private JTable registersTable;

  private TriggersTableModel triggersModel = new TriggersTableModel();
  private JTable triggersTable;

  private BeanConnector connector = new BeanConnector();
  
  public WorkflowEditor()
  {
  }

  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";
    
    JTabbedPane tabbedPane = new JTabbedPane();
    CellConstraints cc = new CellConstraints();
    
    FormLayout layout = new FormLayout("2dlu, 50dlu:grow, 2dlu", "2dlu, pref, 2dlu");
    PanelBuilder builder = new PanelBuilder(this, layout);
    
    /////////////////////////////
    // Tab1 (Info)
    /////////////////////////////
    FormLayout layoutInfo = new FormLayout(colLayout, rowLayout);
    JPanel panelInfo = new JPanel();
    PanelBuilder builderInfo = new PanelBuilder(panelInfo, layoutInfo);
    

    builderInfo.addLabel(ResourceManager.getString("name"), cc.xy(2, 4));
    connector.connect(name, "name");
    builderInfo.add(name, cc.xy(4, 4));

    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); 
    
    //attributesModel.setGraphModel(getModel());
    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 (registers)
    //////////////////////////
    FormLayout layoutRegisters = new FormLayout(colLayout, rowLayout);
    JPanel panelRegisters = new JPanel();
    PanelBuilder builderRegisters = new PanelBuilder(panelRegisters, layoutRegisters);
    
    registersTable = new JTable(registersModel);
    registersTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    registersModel.setGraphModel(getModel());
    builderRegisters.add(UIFactory.createTablePanel(registersTable), cc.xywh(2, 2, 3, 1));    // 2, 20, 3, 1
    builderRegisters.add(UIFactory.getAddRemovePropertiesBar(this, "register", BUTTONS), cc.xywh(2, 4, 3, 1));  // 2, 21, 3, 1
    
    tabbedPane.add(ResourceManager.getString("registers"), panelRegisters);
    
    //////////////////////////
    // Tab4 (trigger-functions)
    //////////////////////////
    FormLayout layoutTriggers = new FormLayout(colLayout, rowLayout);
    JPanel panelTriggers = new JPanel();
    PanelBuilder builderTriggers = new PanelBuilder(panelTriggers, layoutTriggers);
    
    triggersTable = new JTable(triggersModel);
    triggersTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    triggersModel.setGraphModel(getModel());
    builderTriggers.add(UIFactory.createTablePanel(triggersTable), cc.xywh(2, 2, 3, 1));
    builderTriggers.add(UIFactory.getAddRemovePropertiesBar(this, "trigger", BUTTONS), cc.xywh(2, 4, 3, 1));
    
    tabbedPane.add(ResourceManager.getString("triggerfunctions"), panelTriggers);
    
    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("registeradd"))
    {
      registeradd();
    }
    else if(command.equals("registerremove"))
    {
      registerremove();
    }
    else if(command.equals("registeredit"))
    {
      registermodify();
    }
    else if(command.equals("triggeradd"))
    {
      triggeradd();
    }
    else if(command.equals("triggerremove"))
    {
      triggerremove();
    }
    else if(command.equals("triggeredit"))
    {
      triggermodify();
    }
  }

  public String getTitle()
  {
    return ResourceManager.getString("title.workflow", new Object[]{((WorkflowDescriptor)getDescriptor()).getName()});
  }

  protected void viewClosed()
  {
    if (registersTable.isEditing())
    {
      registersTable.getCellEditor().stopCellEditing();
    }
    else if (attributesTable.isEditing())
    {
      attributesTable.getCellEditor().stopCellEditing();
    }
    else if (triggersTable.isEditing())
    {
      triggersTable.getCellEditor().stopCellEditing();
    }
  }
  
  protected void updateView()
  {
    WorkflowDescriptor workflowDescriptor = (WorkflowDescriptor)getDescriptor();
    
    attributesModel.setMap(workflowDescriptor.getMetaAttributes());
    attributesTable.getSelectionModel().clearSelection();
      
    registersModel.setList(workflowDescriptor.getRegisters());
    registersTable.getSelectionModel().clearSelection(); 
    
    triggersModel.setMap(workflowDescriptor.getTriggerFunctions());
    triggersTable.getSelectionModel().clearSelection(); 
    
    connector.setSource(workflowDescriptor);
    connector.setPanel(this);
  }
  
  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 registeradd()
  {
    RegisterEditor editor = new RegisterEditor(getDescriptor());
    editor.setModel(getModel());
    RegisterDescriptor reg = editor.add();
    if (reg!=null)
    {
      registersModel.add(reg);
    }
  }

  private void registerremove()
  {
    int[] rows = registersTable.getSelectedRows();
    for(int i = 0; i < rows.length; i++)
    {
      registersModel.remove(rows[i]);
    }
  }

  private void registermodify()
  {
    int[] rows = registersTable.getSelectedRows();
    for(int i = 0; i < rows.length; i++)
    {
      registermodify(rows[i]);
    }
  }

  private void registermodify(int selected)
  {
    RegisterDescriptor reg = (RegisterDescriptor)registersModel.get(selected);

    RegisterEditor editor = new RegisterEditor(getDescriptor());
    editor.setModel(getModel());
    editor.modify(reg);
    registersModel.fireTableDataChanged();
  }

  private void triggeradd()
  {
    TriggerFunctionEditor editor = new TriggerFunctionEditor((WorkflowDescriptor)getDescriptor());
    editor.setModel(getModel());
    FunctionDescriptor func = editor.add();
    if (func!=null)
    {
      //Utils.checkId(getModel().getContext(), func);    
      func.setId(Utils.getNextId(getModel().getContext()));
      Utils.checkId(getModel().getContext(), func);
      triggersModel.add(new Integer(func.getId()), func);
    }
  }

  private void triggerremove()
  {
    int[] rows = triggersTable.getSelectedRows();
    for(int i = 0; i < rows.length; i++)
    {
      Integer idKey = new Integer(Integer.parseInt((String)triggersModel.getValueAt(rows[i], 0)));
      triggersModel.remove(idKey);
    }  
  }

  private void triggermodify()
  {
    int[] rows = triggersTable.getSelectedRows();
    for(int i = 0; i < rows.length; i++)
    {
      triggermodify(rows[i]);
    }    
  }

  private void triggermodify(int selected)
  {
    Integer idKey = new Integer(Integer.parseInt((String)triggersModel.getValueAt(selected, 0)));
    FunctionDescriptor func = (FunctionDescriptor)triggersModel.get(idKey);
    if (func!=null)
    {
      TriggerFunctionEditor editor = new TriggerFunctionEditor((WorkflowDescriptor)getDescriptor());
      editor.setModel(getModel());
      editor.modify(func);
      triggersModel.fireTableDataChanged();
    }    
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.