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.ExecutionAdministration;
014: import org.enhydra.shark.api.client.wfservice.WMEntity;
015: import org.enhydra.shark.api.common.ProcessFilterBuilder;
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.monitoring.ProcessMonitor;
023:
024: /**
025: * Reevaluates assignments (all, for some package, for particular process definition).
026: *
027: * @author Sasa Bojanic
028: */
029: public class ReevaluateAssignments extends ActionBase {
030:
031: public ReevaluateAssignments(ProcessMonitor pim) {
032: super (pim);
033: }
034:
035: public void actionPerformed(ActionEvent e) {
036: ProcessMonitor pm = (ProcessMonitor) actionPanel;
037: EngineTreeNode dmtn = pm.getSelectedNode();
038: if (dmtn == null) {
039: return;
040: }
041: if (dmtn.getType() != EngineTreeNode.TYPE_PROCESSINSTANCE) {
042: int v = SharkClient.getAdminVersion();
043: if (v == SharkClient.COMMUNITY_VERSION) {
044: JOptionPane
045: .showMessageDialog(pm.getWindow(),
046: "In Community edition this action works only with single process instance!");
047: return;
048: }
049: if (v == SharkClient.DEMO_VERSION && actionPerformed >= 3) {
050: JOptionPane
051: .showMessageDialog(
052: pm.getWindow(),
053: "In Demo version there is a limitation in number of times of performing this action on multiple process instances!");
054: return;
055: }
056: }
057: int yn = JOptionPane
058: .showConfirmDialog(
059: pm.getWindow(),
060: ResourceManager
061: .getLanguageDependentString("MessageAreYouSure"),
062: SharkClient.getAppTitle(),
063: JOptionPane.YES_NO_OPTION);
064:
065: if (yn == JOptionPane.NO_OPTION)
066: return;
067:
068: UserTransaction ut = null;
069:
070: try {
071: ExecutionAdministration ea = SharkInterfaceWrapper
072: .getShark().getExecutionAdministration();
073: ut = SharkInterfaceWrapper.getUserTransaction();
074: ut.begin();
075: WMSessionHandle shandle = SharkClient.getSessionHandle();
076: ProcessFilterBuilder ab = SharkInterfaceWrapper.getShark()
077: .getProcessFilterBuilder();
078:
079: WMFilter filter = null;
080:
081: if (dmtn.getType() == EngineTreeNode.TYPE_PACKAGE) {
082: filter = ab.addPackageIdEquals(shandle, dmtn.getId());
083: } else if (dmtn.getType() == EngineTreeNode.TYPE_PROCESSDEFINITION) {
084: AdminMisc am = SharkInterfaceWrapper.getShark()
085: .getAdminMisc();
086: WMEntity ent = am
087: .getProcessDefinitionInfoByUniqueProcessDefinitionName(
088: shandle, dmtn.getId());
089: String pkgId = ent.getPkgId();
090: String pDefId = ent.getId();
091: filter = ab.addPackageIdEquals(shandle, pkgId);
092: filter = ab.and(shandle, filter, ab
093: .addProcessDefIdEquals(shandle, pDefId));
094: } else if (dmtn.getType() == EngineTreeNode.TYPE_PROCESSINSTANCE) {
095: filter = ab.addIdEquals(shandle, dmtn.getId());
096: }
097:
098: WMActivityInstanceIterator ai = ea
099: .reevaluateAssignmentsWithFiltering(shandle,
100: filter, true);
101: ut.commit();
102:
103: ResultPanel result = new ResultPanel(
104: pm.getWindow(),
105: SharkClient.getAppTitle(),
106: ResourceManager
107: .getLanguageDependentString("MessageReevaluatedAssignments"),
108: null, ai, null, null);
109:
110: result.showDialog();
111:
112: if (dmtn.getType() != EngineTreeNode.TYPE_PROCESSINSTANCE
113: && SharkClient.getAdminVersion() == SharkClient.DEMO_VERSION) {
114: actionPerformed++;
115: }
116:
117: } catch (Exception ex) {
118: try {
119: if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
120: ut.rollback();
121: }
122: } catch (Exception _) {
123: }
124: ex.printStackTrace();
125: JOptionPane.showMessageDialog(pm.getWindow(), ex
126: .getMessage(), SharkClient.getAppTitle(),
127: JOptionPane.ERROR_MESSAGE);
128: }
129:
130: }
131: }
|