001: package org.enhydra.shark.swingclient.workflowadmin.monitoring.actions;
002:
003: import java.awt.event.ActionEvent;
004:
005: import javax.swing.JOptionPane;
006: import javax.transaction.Status;
007: import javax.transaction.UserTransaction;
008:
009: import org.enhydra.shark.api.client.wfmc.wapi.WMActivityInstanceIterator;
010: import org.enhydra.shark.api.client.wfmc.wapi.WMFilter;
011: import org.enhydra.shark.api.client.wfmc.wapi.WMProcessInstanceIterator;
012: import org.enhydra.shark.api.client.wfmc.wapi.WMSessionHandle;
013: import org.enhydra.shark.api.client.wfservice.AdminMisc;
014: import org.enhydra.shark.api.client.wfservice.WMEntity;
015: import org.enhydra.shark.api.common.ActivityFilterBuilder;
016: import org.enhydra.shark.api.common.ProcessFilterBuilder;
017: import org.enhydra.shark.api.common.SharkConstants;
018: import org.enhydra.shark.client.utilities.SharkInterfaceWrapper;
019: import org.enhydra.shark.swingclient.ActionBase;
020: import org.enhydra.shark.swingclient.ResourceManager;
021: import org.enhydra.shark.swingclient.ResultPanel;
022: import org.enhydra.shark.swingclient.SharkClient;
023: import org.enhydra.shark.swingclient.workflowadmin.EngineTreeNode;
024: import org.enhydra.shark.swingclient.workflowadmin.monitoring.ProcessMonitor;
025:
026: /**
027: * Checks limits for selected process and its activities (if it is not finished), or for
028: * all running processes and activities if process is not selected.
029: *
030: * @author Sasa Bojanic
031: */
032: public class CheckLimits extends ActionBase {
033:
034: public CheckLimits(ProcessMonitor pm) {
035: super (pm);
036: }
037:
038: public void actionPerformed(ActionEvent e) {
039: ProcessMonitor pm = (ProcessMonitor) actionPanel;
040:
041: EngineTreeNode dmtn = pm.getSelectedNode();
042: if (dmtn == null) {
043: return;
044: }
045: if (dmtn.getType() != EngineTreeNode.TYPE_PROCESSINSTANCE) {
046: int v = SharkClient.getAdminVersion();
047: if (v == SharkClient.COMMUNITY_VERSION) {
048: JOptionPane
049: .showMessageDialog(pm.getWindow(),
050: "In Community edition this action works only with single process instance!");
051: return;
052: }
053: if (v == SharkClient.DEMO_VERSION && actionPerformed >= 3) {
054: JOptionPane
055: .showMessageDialog(
056: pm.getWindow(),
057: "In Demo version there is a limitation in number of times of performing this action on multiple process instances!");
058: return;
059: }
060: }
061:
062: UserTransaction ut = null;
063:
064: try {
065: ut = SharkInterfaceWrapper.getUserTransaction();
066: ut.begin();
067:
068: WMSessionHandle shandle = SharkClient.getSessionHandle();
069: ProcessFilterBuilder pb = SharkInterfaceWrapper.getShark()
070: .getProcessFilterBuilder();
071:
072: ActivityFilterBuilder ab = SharkInterfaceWrapper.getShark()
073: .getActivityFilterBuilder();
074:
075: WMFilter pFilter = null;
076: WMFilter aFilter = null;
077:
078: if (dmtn.getType() == EngineTreeNode.TYPE_PACKAGE) {
079: pFilter = pb.addPackageIdEquals(shandle, dmtn.getId());
080: pFilter = pb.and(shandle, pFilter, pb
081: .addStateStartsWith(shandle,
082: SharkConstants.STATEPREFIX_OPEN));
083:
084: aFilter = ab.addPackageIdEquals(shandle, dmtn.getId());
085: aFilter = ab.and(shandle, aFilter, ab
086: .addStateStartsWith(shandle,
087: SharkConstants.STATEPREFIX_OPEN));
088: } else if (dmtn.getType() == EngineTreeNode.TYPE_PROCESSDEFINITION) {
089: AdminMisc am = SharkInterfaceWrapper.getShark()
090: .getAdminMisc();
091: WMEntity ent = am
092: .getProcessDefinitionInfoByUniqueProcessDefinitionName(
093: shandle, dmtn.getId());
094: String pkgId = ent.getPkgId();
095: String pDefId = ent.getId();
096: pFilter = pb.addPackageIdEquals(shandle, pkgId);
097: pFilter = pb.and(shandle, pFilter, pb
098: .addProcessDefIdEquals(shandle, pDefId));
099: pFilter = pb.and(shandle, pFilter, pb
100: .addStateStartsWith(shandle,
101: SharkConstants.STATEPREFIX_OPEN));
102:
103: aFilter = ab.addPackageIdEquals(shandle, pkgId);
104: aFilter = ab.and(shandle, aFilter, ab
105: .addProcessDefIdEquals(shandle, pDefId));
106: aFilter = ab.and(shandle, aFilter, ab
107: .addStateStartsWith(shandle,
108: SharkConstants.STATEPREFIX_OPEN));
109: } else if (dmtn.getType() == EngineTreeNode.TYPE_PROCESSINSTANCE) {
110: pFilter = pb.addIdEquals(shandle, dmtn.getId());
111:
112: aFilter = ab.addProcessIdEquals(shandle, dmtn.getId());
113: }
114:
115: WMProcessInstanceIterator pi = SharkInterfaceWrapper
116: .getShark().getExecutionAdministration()
117: .checkLimitsWithProcessFiltering(shandle, pFilter,
118: false);
119:
120: WMActivityInstanceIterator ai = SharkInterfaceWrapper
121: .getShark().getExecutionAdministration()
122: .checkLimitsWithActivityFiltering(shandle, aFilter);
123:
124: ut.commit();
125:
126: ResultPanel result = new ResultPanel(
127: pm.getWindow(),
128: SharkClient.getAppTitle(),
129: ResourceManager
130: .getLanguageDependentString("MessageLimitReached"),
131: pi, ai, null, null);
132:
133: result.showDialog();
134:
135: if (dmtn.getType() != EngineTreeNode.TYPE_PROCESSINSTANCE
136: && SharkClient.getAdminVersion() == SharkClient.DEMO_VERSION) {
137: actionPerformed++;
138: }
139: } catch (Exception ex) {
140: try {
141: if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
142: ut.rollback();
143: }
144: } catch (Exception _) {
145: }
146: ex.printStackTrace();
147: JOptionPane.showMessageDialog(pm.getWindow(), ex
148: .getMessage(), SharkClient.getAppTitle(),
149: JOptionPane.ERROR_MESSAGE);
150: }
151: }
152: }
|