001: package org.enhydra.shark.swingclient.workflowadmin.monitoring.actions;
002:
003: import java.awt.event.ActionEvent;
004: import java.util.ArrayList;
005: import java.util.List;
006:
007: import javax.swing.JOptionPane;
008: import javax.transaction.Status;
009: import javax.transaction.UserTransaction;
010:
011: import org.enhydra.shark.api.client.wfmc.wapi.WMFilter;
012: import org.enhydra.shark.api.client.wfmc.wapi.WMProcessInstance;
013: import org.enhydra.shark.api.client.wfmc.wapi.WMProcessInstanceIterator;
014: import org.enhydra.shark.api.client.wfmc.wapi.WMProcessInstanceState;
015: import org.enhydra.shark.api.client.wfmc.wapi.WMSessionHandle;
016: import org.enhydra.shark.client.utilities.SharkInterfaceWrapper;
017: import org.enhydra.shark.swingclient.ActionBase;
018: import org.enhydra.shark.swingclient.CommonFilterBuilder;
019: import org.enhydra.shark.swingclient.ResourceManager;
020: import org.enhydra.shark.swingclient.ResultPanel;
021: import org.enhydra.shark.swingclient.SharkClient;
022: import org.enhydra.shark.swingclient.workflowadmin.EngineTreeNode;
023: import org.enhydra.shark.swingclient.workflowadmin.SharkAdmin;
024: import org.enhydra.shark.swingclient.workflowadmin.monitoring.ProcessMonitor;
025:
026: /**
027: * Terminates all processes, or the one from Package/Process definition/selected one.
028: *
029: * @author Sasa Bojanic
030: * @version 1.0
031: */
032: public class TerminateProcesses extends ActionBase {
033:
034: public TerminateProcesses(ProcessMonitor pm) {
035: super (pm);
036: }
037:
038: public void actionPerformed(ActionEvent e) {
039: ProcessMonitor pm = (ProcessMonitor) actionPanel;
040: SharkAdmin workflowAdmin = pm.getWorkflowAdmin();
041:
042: String pkgId = null;
043: String mgrName = null;
044: EngineTreeNode dmtn = pm.getSelectedNode();
045: if (dmtn == null) {
046: return;
047: }
048: if (dmtn.getType() != EngineTreeNode.TYPE_PROCESSINSTANCE) {
049: int v = SharkClient.getAdminVersion();
050: if (v == SharkClient.COMMUNITY_VERSION) {
051: JOptionPane
052: .showMessageDialog(pm.getWindow(),
053: "In Community edition this action works only with single process instance!");
054: return;
055: }
056: if (v == SharkClient.DEMO_VERSION && actionPerformed >= 3) {
057: JOptionPane
058: .showMessageDialog(
059: pm.getWindow(),
060: "In Demo version there is a limitation in number of times of performing this action on multiple process instances!");
061: return;
062: }
063: }
064:
065: int yn = JOptionPane
066: .showConfirmDialog(
067: pm.getWindow(),
068: ResourceManager
069: .getLanguageDependentString("MessageAreYouSure"),
070: SharkClient.getAppTitle(),
071: JOptionPane.YES_NO_OPTION);
072:
073: if (yn == JOptionPane.NO_OPTION)
074: return;
075:
076: UserTransaction ut = null;
077:
078: try {
079: ut = SharkInterfaceWrapper.getUserTransaction();
080: ut.begin();
081: WMSessionHandle shandle = SharkClient.getSessionHandle();
082: if (dmtn == null) {
083: pkgId = "";
084: } else if (dmtn.getType() == EngineTreeNode.TYPE_PACKAGE) {
085: pkgId = dmtn.getId();
086: } else if (dmtn.getType() == EngineTreeNode.TYPE_PROCESSDEFINITION) {
087: mgrName = dmtn.getId();
088: } else if (dmtn.getType() != EngineTreeNode.TYPE_PROCESSINSTANCE) {
089: pkgId = "";
090: }
091:
092: CommonFilterBuilder ceb = SharkClient
093: .getCommonFilterBuilder();
094: WMProcessInstanceIterator pii = new WMProcessInstanceIterator();
095: if (pkgId != null || mgrName != null) {
096: WMFilter f = null;
097: if (mgrName != null) {
098: f = ceb
099: .getOpenProcessesForManager(shandle,
100: mgrName);
101: } else if (!pkgId.equals("")) {
102: f = ceb.getOpenProcessesForPkg(shandle, pkgId);
103: } else {
104: f = ceb.getOpenProcesses(shandle);
105: }
106: WMProcessInstance[] procs = SharkInterfaceWrapper
107: .getShark().getWAPIConnection()
108: .listProcessInstances(shandle, f, true)
109: .getArray();
110:
111: ut.commit();
112: List term = new ArrayList();
113: for (int j = 0; j < procs.length / 100 + 1; j++) {
114: if (j * 100 >= procs.length)
115: break;
116: List tint = new ArrayList();
117: try {
118: ut.begin();
119: for (int i = j * 100; i < (j + 1) * 100
120: && i < procs.length; i++) {
121: SharkInterfaceWrapper
122: .getShark()
123: .getWAPIConnection()
124: .changeProcessInstanceState(
125: shandle,
126: procs[i].getId(),
127: WMProcessInstanceState.CLOSED_TERMINATED);
128: procs[i]
129: .setState(WMProcessInstanceState.CLOSED_TERMINATED);
130: tint.add(procs[i]);
131: }
132: ut.commit();
133: term.addAll(tint);
134: } catch (Exception ei) {
135: try {
136: if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
137: ut.rollback();
138: }
139: } catch (Exception _) {
140: }
141: ei.printStackTrace();
142: }
143: }
144: ut.begin();
145: WMProcessInstance[] piarr = null;
146: if (term.size() == procs.length) {
147: piarr = procs;
148: } else {
149: piarr = new WMProcessInstance[term.size()];
150: term.toArray(piarr);
151: }
152: pii.setArray(piarr);
153: pii.setCount(piarr.length);
154: } else {
155: String procId = dmtn.getId();
156: WMProcessInstance proc = SharkInterfaceWrapper
157: .getShark().getWAPIConnection()
158: .getProcessInstance(shandle, procId);
159: SharkInterfaceWrapper
160: .getShark()
161: .getWAPIConnection()
162: .changeProcessInstanceState(
163: shandle,
164: procId,
165: WMProcessInstanceState.CLOSED_TERMINATED);
166: WMProcessInstance[] pia = new WMProcessInstance[1];
167: proc.setState(WMProcessInstanceState.CLOSED_TERMINATED);
168: pia[0] = proc;
169: pii.setArray(pia);
170: pii.setCount(1);
171: }
172:
173: ut.commit();
174:
175: ResultPanel result = new ResultPanel(
176: pm.getWindow(),
177: SharkClient.getAppTitle(),
178: ResourceManager
179: .getLanguageDependentString("MessageActionTerminate"),
180: pii, null, null, null);
181: result.showDialog();
182:
183: if (!SharkClient.getShowFinishedProcesses()) {
184: WMProcessInstance[] pia = pii.getArray();
185: for (int i = 0; i < pia.length; i++) {
186: WMProcessInstance pi = pia[i];
187: workflowAdmin.getEngineTreeModel().removeProcess(
188: pi.getProcessFactoryName(), pi.getId());
189: }
190: }
191: ut.begin();
192: pm.refresh(true);
193: ut.commit();
194:
195: if (dmtn.getType() != EngineTreeNode.TYPE_PROCESSINSTANCE
196: && SharkClient.getAdminVersion() == SharkClient.DEMO_VERSION) {
197: actionPerformed++;
198: }
199:
200: } catch (Exception ex) {
201: try {
202: if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
203: ut.rollback();
204: }
205: } catch (Exception _) {
206: }
207: ex.printStackTrace();
208: JOptionPane.showMessageDialog(pm.getWindow(), ex
209: .getMessage(), SharkClient.getAppTitle(),
210: JOptionPane.ERROR_MESSAGE);
211: }
212:
213: }
214: }
|