001: package com.opensymphony.workflow.designer.editor;
002:
003: import javax.swing.*;
004: import java.awt.event.ActionListener;
005: import java.awt.event.ActionEvent;
006:
007: import com.jgoodies.forms.layout.FormLayout;
008: import com.jgoodies.forms.layout.CellConstraints;
009: import com.jgoodies.forms.builder.PanelBuilder;
010: import com.opensymphony.workflow.designer.dialogs.AttributeDialog;
011: import com.opensymphony.workflow.designer.WorkflowDesigner;
012: import com.opensymphony.workflow.designer.UIFactory;
013: import com.opensymphony.workflow.designer.Utils;
014: import com.opensymphony.workflow.designer.ResourceManager;
015: import com.opensymphony.workflow.designer.beanutils.BeanConnector;
016: import com.opensymphony.workflow.designer.model.AttributesTableModel;
017: import com.opensymphony.workflow.designer.model.RegistersTableModel;
018: import com.opensymphony.workflow.designer.model.TriggersTableModel;
019: import com.opensymphony.workflow.loader.WorkflowDescriptor;
020: import com.opensymphony.workflow.loader.RegisterDescriptor;
021: import com.opensymphony.workflow.loader.FunctionDescriptor;
022:
023: public class WorkflowEditor extends DetailPanel implements
024: ActionListener {
025: private static final String[] BUTTONS = new String[] { "add",
026: "remove", "edit" };
027: private JTextField name = new JTextField();
028:
029: private AttributesTableModel attributesModel = new AttributesTableModel();
030: private JTable attributesTable;
031:
032: private RegistersTableModel registersModel = new RegistersTableModel();
033: private JTable registersTable;
034:
035: private TriggersTableModel triggersModel = new TriggersTableModel();
036: private JTable triggersTable;
037:
038: private BeanConnector connector = new BeanConnector();
039:
040: public WorkflowEditor() {
041: }
042:
043: protected void initComponents() {
044: String colLayout = "2dlu, max(32dlu;pref), 2dlu, pref:grow, 4dlu";
045: String rowLayout = "4dlu, pref, 2dlu, pref, 2dlu, pref, 2dlu, pref, 2dlu, pref";
046:
047: JTabbedPane tabbedPane = new JTabbedPane();
048: CellConstraints cc = new CellConstraints();
049:
050: FormLayout layout = new FormLayout("2dlu, 50dlu:grow, 2dlu",
051: "2dlu, pref, 2dlu");
052: PanelBuilder builder = new PanelBuilder(this , layout);
053:
054: /////////////////////////////
055: // Tab1 (Info)
056: /////////////////////////////
057: FormLayout layoutInfo = new FormLayout(colLayout, rowLayout);
058: JPanel panelInfo = new JPanel();
059: PanelBuilder builderInfo = new PanelBuilder(panelInfo,
060: layoutInfo);
061:
062: builderInfo.addLabel(ResourceManager.getString("name"), cc.xy(
063: 2, 4));
064: connector.connect(name, "name");
065: builderInfo.add(name, cc.xy(4, 4));
066:
067: tabbedPane.add(ResourceManager.getString("info"), panelInfo);
068:
069: ///////////////////////////
070: // Tab2 (meta attributes)
071: ///////////////////////////
072: FormLayout layoutAttrib = new FormLayout(colLayout, rowLayout);
073: JPanel panelAttrib = new JPanel();
074: PanelBuilder builderAttrib = new PanelBuilder(panelAttrib,
075: layoutAttrib);
076:
077: attributesTable = new JTable(attributesModel);
078: attributesTable.getSelectionModel().setSelectionMode(
079: ListSelectionModel.SINGLE_SELECTION);
080:
081: //attributesModel.setGraphModel(getModel());
082: builderAttrib.add(UIFactory.createTablePanel(attributesTable),
083: cc.xywh(2, 2, 3, 1)); // 2, 15, 3, 1
084: builderAttrib.add(UIFactory.getAddRemovePropertiesBar(this ,
085: "attribute", BUTTONS), cc.xywh(2, 4, 3, 1)); // 2, 16, 3, 1
086:
087: tabbedPane.add(ResourceManager.getString("attributes"),
088: panelAttrib);
089:
090: //////////////////////////
091: // Tab3 (registers)
092: //////////////////////////
093: FormLayout layoutRegisters = new FormLayout(colLayout,
094: rowLayout);
095: JPanel panelRegisters = new JPanel();
096: PanelBuilder builderRegisters = new PanelBuilder(
097: panelRegisters, layoutRegisters);
098:
099: registersTable = new JTable(registersModel);
100: registersTable.getSelectionModel().setSelectionMode(
101: ListSelectionModel.SINGLE_SELECTION);
102: registersModel.setGraphModel(getModel());
103: builderRegisters.add(
104: UIFactory.createTablePanel(registersTable), cc.xywh(2,
105: 2, 3, 1)); // 2, 20, 3, 1
106: builderRegisters.add(UIFactory.getAddRemovePropertiesBar(this ,
107: "register", BUTTONS), cc.xywh(2, 4, 3, 1)); // 2, 21, 3, 1
108:
109: tabbedPane.add(ResourceManager.getString("registers"),
110: panelRegisters);
111:
112: //////////////////////////
113: // Tab4 (trigger-functions)
114: //////////////////////////
115: FormLayout layoutTriggers = new FormLayout(colLayout, rowLayout);
116: JPanel panelTriggers = new JPanel();
117: PanelBuilder builderTriggers = new PanelBuilder(panelTriggers,
118: layoutTriggers);
119:
120: triggersTable = new JTable(triggersModel);
121: triggersTable.getSelectionModel().setSelectionMode(
122: ListSelectionModel.SINGLE_SELECTION);
123: triggersModel.setGraphModel(getModel());
124: builderTriggers.add(UIFactory.createTablePanel(triggersTable),
125: cc.xywh(2, 2, 3, 1));
126: builderTriggers.add(UIFactory.getAddRemovePropertiesBar(this ,
127: "trigger", BUTTONS), cc.xywh(2, 4, 3, 1));
128:
129: tabbedPane.add(ResourceManager.getString("triggerfunctions"),
130: panelTriggers);
131:
132: builder.add(tabbedPane, cc.xy(2, 2));
133:
134: }
135:
136: public void actionPerformed(ActionEvent e) {
137: String command = e.getActionCommand().toLowerCase();
138: if (command.equals("attributeadd")) {
139: attributeadd();
140: } else if (command.equals("attributeremove")) {
141: attributeremove();
142: } else if (command.equals("attributeedit")) {
143: attributemodify();
144: } else if (command.equals("registeradd")) {
145: registeradd();
146: } else if (command.equals("registerremove")) {
147: registerremove();
148: } else if (command.equals("registeredit")) {
149: registermodify();
150: } else if (command.equals("triggeradd")) {
151: triggeradd();
152: } else if (command.equals("triggerremove")) {
153: triggerremove();
154: } else if (command.equals("triggeredit")) {
155: triggermodify();
156: }
157: }
158:
159: public String getTitle() {
160: return ResourceManager.getString("title.workflow",
161: new Object[] { ((WorkflowDescriptor) getDescriptor())
162: .getName() });
163: }
164:
165: protected void viewClosed() {
166: if (registersTable.isEditing()) {
167: registersTable.getCellEditor().stopCellEditing();
168: } else if (attributesTable.isEditing()) {
169: attributesTable.getCellEditor().stopCellEditing();
170: } else if (triggersTable.isEditing()) {
171: triggersTable.getCellEditor().stopCellEditing();
172: }
173: }
174:
175: protected void updateView() {
176: WorkflowDescriptor workflowDescriptor = (WorkflowDescriptor) getDescriptor();
177:
178: attributesModel.setMap(workflowDescriptor.getMetaAttributes());
179: attributesTable.getSelectionModel().clearSelection();
180:
181: registersModel.setList(workflowDescriptor.getRegisters());
182: registersTable.getSelectionModel().clearSelection();
183:
184: triggersModel.setMap(workflowDescriptor.getTriggerFunctions());
185: triggersTable.getSelectionModel().clearSelection();
186:
187: connector.setSource(workflowDescriptor);
188: connector.setPanel(this );
189: }
190:
191: private void attributeadd() {
192: AttributeDialog dlg = new AttributeDialog(
193: WorkflowDesigner.INSTANCE, "", "", true);
194: if (dlg.ask(WorkflowDesigner.INSTANCE)) {
195: String sKey = dlg.keyField.getText();
196: String sValue = dlg.valueField.getText();
197: if (sKey.length() > 0) {
198: attributesModel.add(sKey, sValue);
199: }
200: }
201: }
202:
203: private void attributeremove() {
204: int[] rows = attributesTable.getSelectedRows();
205: for (int i = 0; i < rows.length; i++) {
206: String sKey = (String) attributesModel.getValueAt(rows[i],
207: 0);
208: attributesModel.remove(sKey);
209: }
210: }
211:
212: private void attributemodify() {
213: int[] rows = attributesTable.getSelectedRows();
214: for (int i = 0; i < rows.length; i++) {
215: attributemodify(rows[i]);
216: }
217: }
218:
219: private void attributemodify(int selected) {
220: String sKey = (String) attributesModel.getValueAt(selected, 0);
221: String sValue = (String) attributesModel
222: .getValueAt(selected, 1);
223: if ((sKey != null) && (sKey.length() > 0)) {
224: AttributeDialog dlg = new AttributeDialog(
225: WorkflowDesigner.INSTANCE, sKey, sValue, false);
226: if (dlg.ask(WorkflowDesigner.INSTANCE)) {
227: sValue = dlg.valueField.getText();
228: attributesModel.add(sKey, sValue);
229: }
230: }
231: }
232:
233: private void registeradd() {
234: RegisterEditor editor = new RegisterEditor(getDescriptor());
235: editor.setModel(getModel());
236: RegisterDescriptor reg = editor.add();
237: if (reg != null) {
238: registersModel.add(reg);
239: }
240: }
241:
242: private void registerremove() {
243: int[] rows = registersTable.getSelectedRows();
244: for (int i = 0; i < rows.length; i++) {
245: registersModel.remove(rows[i]);
246: }
247: }
248:
249: private void registermodify() {
250: int[] rows = registersTable.getSelectedRows();
251: for (int i = 0; i < rows.length; i++) {
252: registermodify(rows[i]);
253: }
254: }
255:
256: private void registermodify(int selected) {
257: RegisterDescriptor reg = (RegisterDescriptor) registersModel
258: .get(selected);
259:
260: RegisterEditor editor = new RegisterEditor(getDescriptor());
261: editor.setModel(getModel());
262: editor.modify(reg);
263: registersModel.fireTableDataChanged();
264: }
265:
266: private void triggeradd() {
267: TriggerFunctionEditor editor = new TriggerFunctionEditor(
268: (WorkflowDescriptor) getDescriptor());
269: editor.setModel(getModel());
270: FunctionDescriptor func = editor.add();
271: if (func != null) {
272: //Utils.checkId(getModel().getContext(), func);
273: func.setId(Utils.getNextId(getModel().getContext()));
274: Utils.checkId(getModel().getContext(), func);
275: triggersModel.add(new Integer(func.getId()), func);
276: }
277: }
278:
279: private void triggerremove() {
280: int[] rows = triggersTable.getSelectedRows();
281: for (int i = 0; i < rows.length; i++) {
282: Integer idKey = new Integer(Integer
283: .parseInt((String) triggersModel.getValueAt(
284: rows[i], 0)));
285: triggersModel.remove(idKey);
286: }
287: }
288:
289: private void triggermodify() {
290: int[] rows = triggersTable.getSelectedRows();
291: for (int i = 0; i < rows.length; i++) {
292: triggermodify(rows[i]);
293: }
294: }
295:
296: private void triggermodify(int selected) {
297: Integer idKey = new Integer(Integer
298: .parseInt((String) triggersModel
299: .getValueAt(selected, 0)));
300: FunctionDescriptor func = (FunctionDescriptor) triggersModel
301: .get(idKey);
302: if (func != null) {
303: TriggerFunctionEditor editor = new TriggerFunctionEditor(
304: (WorkflowDescriptor) getDescriptor());
305: editor.setModel(getModel());
306: editor.modify(func);
307: triggersModel.fireTableDataChanged();
308: }
309: }
310: }
|