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: * Aborts all processes, or the one from Package/Process definition/selected one.
028: *
029: * @author Sasa Bojanic
030: * @version 1.0
031: */
032: public class AbortProcesses extends ActionBase {
033:
034: public AbortProcesses(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: int yn = JOptionPane
065: .showConfirmDialog(
066: pm.getWindow(),
067: ResourceManager
068: .getLanguageDependentString("MessageAreYouSure"),
069: SharkClient.getAppTitle(),
070: JOptionPane.YES_NO_OPTION);
071:
072: if (yn == JOptionPane.NO_OPTION)
073: return;
074:
075: UserTransaction ut = null;
076:
077: try {
078: ut = SharkInterfaceWrapper.getUserTransaction();
079: ut.begin();
080:
081: WMSessionHandle shandle = SharkClient.getSessionHandle();
082: if (dmtn.getType() == EngineTreeNode.TYPE_PACKAGE) {
083: pkgId = dmtn.getId();
084: } else if (dmtn.getType() == EngineTreeNode.TYPE_PROCESSDEFINITION) {
085: mgrName = dmtn.getId();
086: } else if (dmtn.getType() != EngineTreeNode.TYPE_PROCESSINSTANCE) {
087: pkgId = "";
088: }
089:
090: CommonFilterBuilder ceb = SharkClient
091: .getCommonFilterBuilder();
092: WMProcessInstanceIterator pii = new WMProcessInstanceIterator();
093: if (pkgId != null || mgrName != null) {
094:
095: WMFilter f = null;
096: if (mgrName != null) {
097: f = ceb
098: .getOpenProcessesForManager(shandle,
099: mgrName);
100: } else if (!pkgId.equals("")) {
101: f = ceb.getOpenProcessesForPkg(shandle, pkgId);
102: } else {
103: f = ceb.getOpenProcesses(shandle);
104: }
105:
106: WMProcessInstance[] procs = SharkInterfaceWrapper
107: .getShark().getWAPIConnection()
108: .listProcessInstances(shandle, f, true)
109: .getArray();
110:
111: ut.commit();
112: List abor = new ArrayList();
113: for (int j = 0; j < procs.length / 100 + 1; j++) {
114: if (j * 100 >= procs.length)
115: break;
116: List aint = 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_ABORTED);
128: procs[i]
129: .setState(WMProcessInstanceState.CLOSED_ABORTED);
130: aint.add(procs[i]);
131: }
132: ut.commit();
133: abor.addAll(aint);
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 (abor.size() == procs.length) {
147: piarr = procs;
148: } else {
149: piarr = new WMProcessInstance[abor.size()];
150: abor.toArray(piarr);
151: }
152: pii.setArray(piarr);
153: pii.setCount(piarr.length);
154: } else {
155: String procId = dmtn.getId();
156: WMProcessInstance[] pia = new WMProcessInstance[1];
157: pia[0] = SharkInterfaceWrapper.getShark()
158: .getWAPIConnection().getProcessInstance(
159: shandle, procId);
160: pia[0].setState(WMProcessInstanceState.CLOSED_ABORTED);
161: pii.setArray(pia);
162: pii.setCount(1);
163: SharkInterfaceWrapper.getShark().getWAPIConnection()
164: .abortProcessInstance(shandle, procId);
165: }
166: ut.commit();
167:
168: ResultPanel result = new ResultPanel(
169: pm.getWindow(),
170: SharkClient.getAppTitle(),
171: ResourceManager
172: .getLanguageDependentString("MessageActionAbort"),
173: pii, null, null, null);
174:
175: result.showDialog();
176:
177: if (!SharkClient.getShowFinishedProcesses()) {
178: WMProcessInstance[] pia = pii.getArray();
179: for (int i = 0; i < pia.length; i++) {
180: WMProcessInstance pi = pia[i];
181: workflowAdmin.getEngineTreeModel().removeProcess(
182: pi.getProcessFactoryName(), pi.getId());
183: }
184: }
185: ut.begin();
186: pm.refresh(true);
187: ut.commit();
188:
189: if (dmtn.getType() != EngineTreeNode.TYPE_PROCESSINSTANCE
190: && SharkClient.getAdminVersion() == SharkClient.DEMO_VERSION) {
191: actionPerformed++;
192: }
193:
194: } catch (Exception ex) {
195: try {
196: if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
197: ut.rollback();
198: }
199: } catch (Exception _) {
200: }
201: ex.printStackTrace();
202: JOptionPane.showMessageDialog(pm.getWindow(), ex
203: .getMessage(), SharkClient.getAppTitle(),
204: JOptionPane.ERROR_MESSAGE);
205: }
206:
207: }
208: }
|