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.WMSessionHandle;
012: import org.enhydra.shark.api.client.wfservice.AdminMisc;
013: import org.enhydra.shark.api.client.wfservice.WMEntity;
014: import org.enhydra.shark.api.common.ProcessFilterBuilder;
015: import org.enhydra.shark.api.common.SharkConstants;
016: import org.enhydra.shark.client.utilities.SharkInterfaceWrapper;
017: import org.enhydra.shark.swingclient.ActionBase;
018: import org.enhydra.shark.swingclient.ResourceManager;
019: import org.enhydra.shark.swingclient.ResultPanel;
020: import org.enhydra.shark.swingclient.SharkClient;
021: import org.enhydra.shark.swingclient.workflowadmin.EngineTreeNode;
022: import org.enhydra.shark.swingclient.workflowadmin.SharkAdmin;
023: import org.enhydra.shark.swingclient.workflowadmin.monitoring.ProcessMonitor;
024:
025: /**
026: * Checks deadlines for selected process (if it is not finished), or for all running
027: * processes if process is not selected.
028: *
029: * @author Sasa Bojanic
030: */
031: public class CheckDeadlines extends ActionBase {
032:
033: public CheckDeadlines(ProcessMonitor pm) {
034: super (pm);
035: }
036:
037: public void actionPerformed(ActionEvent e) {
038: ProcessMonitor pm = (ProcessMonitor) actionPanel;
039: SharkAdmin workflowAdmin = pm.getWorkflowAdmin();
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 pfb = SharkInterfaceWrapper.getShark()
070: .getProcessFilterBuilder();
071:
072: WMFilter afilter = null;
073:
074: if (dmtn.getType() == EngineTreeNode.TYPE_PACKAGE) {
075: afilter = pfb.addPackageIdEquals(shandle, dmtn.getId());
076: afilter = pfb.and(shandle, afilter, pfb.addStateEquals(
077: shandle, SharkConstants.STATE_OPEN_RUNNING));
078: } else if (dmtn.getType() == EngineTreeNode.TYPE_PROCESSDEFINITION) {
079: AdminMisc am = SharkInterfaceWrapper.getShark()
080: .getAdminMisc();
081: WMEntity ent = am
082: .getProcessDefinitionInfoByUniqueProcessDefinitionName(
083: shandle, dmtn.getId());
084: String pkgId = ent.getPkgId();
085: String pDefId = ent.getId();
086: afilter = pfb.addPackageIdEquals(shandle, pkgId);
087: afilter = pfb.and(shandle, afilter, pfb
088: .addProcessDefIdEquals(shandle, pDefId));
089: afilter = pfb.and(shandle, afilter, pfb.addStateEquals(
090: shandle, SharkConstants.STATE_OPEN_RUNNING));
091: } else if (dmtn.getType() == EngineTreeNode.TYPE_PROCESSINSTANCE) {
092: afilter = pfb.addIdEquals(shandle, dmtn.getId());
093: }
094:
095: WMActivityInstanceIterator ai = SharkInterfaceWrapper
096: .getShark().getExecutionAdministration()
097: .checkDeadlinesWithFiltering(shandle, afilter);
098:
099: ut.commit();
100:
101: ResultPanel result = new ResultPanel(
102: pm.getWindow(),
103: SharkClient.getAppTitle(),
104: ResourceManager
105: .getLanguageDependentString("MessageNumberOfTriggeredActivityDeadlines"),
106: null, ai, null, null);
107:
108: result.showDialog();
109:
110: if (ai.getCount() > 0) {
111: ut.begin();
112: workflowAdmin.getEngineTreeModel().refresh(true, true);
113: pm.refresh(true);
114: ut.commit();
115: }
116:
117: if (dmtn.getType() != EngineTreeNode.TYPE_PROCESSINSTANCE
118: && SharkClient.getAdminVersion() == SharkClient.DEMO_VERSION) {
119: actionPerformed++;
120: }
121:
122: } catch (Exception ex) {
123: ex.printStackTrace();
124: try {
125: if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
126: ut.rollback();
127: }
128: } catch (Exception _) {
129: }
130: JOptionPane.showMessageDialog(pm.getWindow(), ex
131: .getMessage(), SharkClient.getAppTitle(),
132: JOptionPane.ERROR_MESSAGE);
133: }
134: }
135: }
|