001: package org.enhydra.shark.swingclient;
002:
003: import java.awt.Component;
004: import java.awt.Window;
005: import java.util.HashMap;
006: import java.util.HashSet;
007: import java.util.Iterator;
008: import java.util.LinkedHashMap;
009: import java.util.Map;
010: import java.util.Set;
011:
012: import javax.swing.BorderFactory;
013: import javax.swing.Box;
014: import javax.swing.BoxLayout;
015: import javax.swing.JOptionPane;
016: import javax.swing.JPanel;
017: import javax.swing.JScrollPane;
018:
019: import org.enhydra.shark.api.client.wfmc.wapi.WMFilter;
020: import org.enhydra.shark.api.client.wfmc.wapi.WMSessionHandle;
021: import org.enhydra.shark.api.client.wfservice.WMEntity;
022: import org.enhydra.shark.api.client.wfservice.XPDLBrowser;
023: import org.enhydra.shark.client.utilities.SharkInterfaceWrapper;
024:
025: /**
026: * Used to update workflow variables.
027: *
028: * @author Sasa Bojanic
029: * @version 1.0
030: */
031: public class UpdateVariables extends ActionPanel {
032:
033: private String mgrName;
034:
035: private Map context;
036:
037: private Map readOnlyContext = new LinkedHashMap();
038:
039: private Set ntvdpanels = new HashSet();
040:
041: private boolean isCanceled = false;
042:
043: public UpdateVariables(Window parent, String dialogName,
044: String mgrName, Map context, Map readOnlyContext) {
045: super ();
046: this .mgrName = mgrName;
047: this .context = context;
048: if (readOnlyContext != null) {
049: this .readOnlyContext.putAll(readOnlyContext);
050: }
051: super .init();
052: super .initDialog(parent, dialogName, true, true);
053: }
054:
055: protected void createActions() {
056: }
057:
058: protected Component createCenterComponent() {
059: JScrollPane jsp = new JScrollPane();
060: JPanel panel = new JPanel();
061: panel
062: .setBorder(BorderFactory.createEmptyBorder(10, 10, 10,
063: 10));
064: panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
065:
066: if (context != null) {
067: int i = 0;
068: for (Iterator it = context.entrySet().iterator(); it
069: .hasNext(); i++) {
070: Map.Entry me = (Map.Entry) it.next();
071: String varId = (String) me.getKey();
072: Object varVal = me.getValue();
073: try {
074: WMSessionHandle shandle = SharkClient
075: .getSessionHandle();
076: String varType;
077: if (varVal != null) {
078: varType = WorkflowUtilities
079: .getTypeKeyOfAnyObject(varVal);
080: } else {
081: try {
082: varType = WorkflowUtilities
083: .getTypeKeyOfAnyObject(SharkInterfaceWrapper
084: .getShark()
085: .getAdminMisc()
086: .getVariableJavaClassNameByUniqueProcessDefinitionName(
087: shandle, mgrName,
088: varId));
089: } catch (Exception ex) {
090: varType = WorkflowUtilities.UNKNOWN_KEY;
091: }
092: }
093: // System.out.println("Var "+varId+", val="+varVal+", varType="+varType);
094: ActionPanel ntvdPanel;
095: String varName = null;
096: String varDesc = null;
097: try {
098: WMEntity varEnt = SharkInterfaceWrapper
099: .getShark()
100: .getAdminMisc()
101: .getVariableDefinitionInfoByUniqueProcessDefinitionName(
102: shandle, mgrName, varId);
103: varName = varEnt.getName();
104: if (varName == null || varName.equals("")) {
105: varName = varId;
106: }
107: WMFilter filter = new WMFilter("Name",
108: WMFilter.EQ, "Description");
109: filter
110: .setFilterType(XPDLBrowser.SIMPLE_TYPE_XPDL);
111: varDesc = SharkInterfaceWrapper.getShark()
112: .getXPDLBrowser().listAttributes(
113: shandle, varEnt, filter, false)
114: .getArray()[0].getValue().toString();
115: } catch (Exception e1) {
116: varName = varId;
117: varDesc = "";
118: }
119: if (!varType.equals(WorkflowUtilities.MAP_KEY)) {
120: ntvdPanel = new NTVDPanel(varId, varVal,
121: varName, varDesc, varType,
122: readOnlyContext.containsKey((varId)));
123: } else {
124: ntvdPanel = new MapPanel(varId,
125: (HashMap) varVal, varName, varDesc,
126: varType, readOnlyContext
127: .containsKey((varId)));
128: }
129: panel.add(ntvdPanel);
130: panel.add(Box.createVerticalStrut(5));
131: ntvdpanels.add(ntvdPanel);
132: } catch (Exception ex) {
133: ex.printStackTrace();
134: }
135: }
136: }
137: panel.add(Box.createVerticalGlue());
138: jsp.setViewportView(panel);
139: return jsp;
140: }
141:
142: private boolean updateFields() {
143: Iterator nvs = ntvdpanels.iterator();
144: while (nvs.hasNext()) {
145: Object p = nvs.next();
146: if (p instanceof NTVDPanel) {
147: NTVDPanel ntvdp = (NTVDPanel) p;
148: if (!ntvdp.updateField() && !ntvdp.isReadOnly()) {
149: JOptionPane
150: .showMessageDialog(
151: this ,
152: ResourceManager
153: .getLanguageDependentString("ErrorIncorrectType"),
154: ResourceManager
155: .getLanguageDependentString("DialogUpdateProcessVariables"),
156: JOptionPane.ERROR_MESSAGE);
157: ntvdp.requestFocus();
158: return false;
159: }
160: } else if (p instanceof MapPanel) {
161: MapPanel mp = (MapPanel) p;
162: if (!mp.updateFields() && !mp.isReadOnly()) {
163: return false;
164: }
165: }
166: }
167: nvs = ntvdpanels.iterator();
168: while (nvs.hasNext()) {
169: Object p = nvs.next();
170: if (p instanceof NTVDPanel) {
171: NTVDPanel ntvdp = (NTVDPanel) p;
172: if (!ntvdp.isReadOnly()) {
173: context.put(ntvdp.getVariableId(), ntvdp
174: .getVariableValue());
175: }
176: } else if (p instanceof MapPanel) {
177: MapPanel mp = (MapPanel) p;
178: if (!mp.isReadOnly()) {
179: context.put(mp.getVariableId(), mp
180: .getVariableValue());
181: }
182: }
183: }
184: return true;
185: }
186:
187: protected void applyChanges() {
188: if (updateFields()) {
189: myDialog.dispose();
190: }
191: }
192:
193: protected void cancelChanges() {
194: isCanceled = true;
195: myDialog.dispose();
196: }
197:
198: public boolean isCanceled() {
199: return isCanceled;
200: }
201:
202: }
|