/* * Copyright 2014 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.overlord.dtgov.jbpm; import org.kie.api.event.process.ProcessCompletedEvent; import org.kie.api.event.process.ProcessEventListener; import org.kie.api.event.process.ProcessNodeLeftEvent; import org.kie.api.event.process.ProcessNodeTriggeredEvent; import org.kie.api.event.process.ProcessStartedEvent; import org.kie.api.event.process.ProcessVariableChangedEvent; import org.kie.api.runtime.process.ProcessInstance; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BaseArtifactType; import org.overlord.dtgov.common.model.DtgovModel; import org.overlord.sramp.atom.err.SrampAtomException; import org.overlord.sramp.client.SrampAtomApiClient; import org.overlord.sramp.client.SrampClientException; import org.overlord.sramp.client.SrampClientQuery; import org.overlord.sramp.client.query.ArtifactSummary; import org.overlord.sramp.client.query.QueryResultSet; import org.overlord.sramp.common.SrampModelUtils; import org.overlord.sramp.governance.SrampAtomApiClientFactory; import org.overlord.sramp.governance.WorkflowAccesor.WorkflowStatusEnum; /** * The dtgov workflow jbmp listener. It modifies values of the workflow artifact * when the process is aborted or completed. * * @author David Virgil Naranjo */ public class WorkflowEventListener implements ProcessEventListener { /* * (non-Javadoc) * * @see * org.kie.api.event.process.ProcessEventListener#beforeProcessStarted(org * .kie.api.event.process.ProcessStartedEvent) */ @Override public void beforeProcessStarted(ProcessStartedEvent event) { } /* * (non-Javadoc) * * @see * org.kie.api.event.process.ProcessEventListener#afterProcessStarted(org * .kie.api.event.process.ProcessStartedEvent) */ @Override public void afterProcessStarted(ProcessStartedEvent event) { } /* * (non-Javadoc) * * @see * org.kie.api.event.process.ProcessEventListener#beforeProcessCompleted * (org.kie.api.event.process.ProcessCompletedEvent) */ @Override public void beforeProcessCompleted(ProcessCompletedEvent event) { } /* * (non-Javadoc) * * @see * org.kie.api.event.process.ProcessEventListener#afterProcessCompleted( * org.kie.api.event.process.ProcessCompletedEvent) */ @Override public void afterProcessCompleted(ProcessCompletedEvent event) { long processId = event.getProcessInstance().getId(); SrampAtomApiClient client = SrampAtomApiClientFactory.createAtomApiClient(); String queryStr = "/s-ramp/ext/" + DtgovModel.WorkflowInstanceType; //$NON-NLS-1$ queryStr += "["; //$NON-NLS-1$ queryStr += "@" + DtgovModel.CUSTOM_PROPERTY_PROCESS_ID + " = ? and "; //$NON-NLS-1$ //$NON-NLS-2$ queryStr += "@" + DtgovModel.CUSTOM_PROPERTY_STATUS + " = ?"; //$NON-NLS-1$ //$NON-NLS-2$ queryStr += "]"; //$NON-NLS-1$ SrampClientQuery query = client.buildQuery(queryStr); query.parameter(processId + ""); //$NON-NLS-1$ query.parameter(WorkflowStatusEnum.RUNNING.name()); QueryResultSet resultSet = null; try { resultSet = query.query(); } catch (SrampClientException e) { } catch (SrampAtomException e) { } if (resultSet != null && resultSet.size() == 1) { ArtifactSummary summary = resultSet.get(0); BaseArtifactType artifact = null; try { artifact = client.getArtifactMetaData(summary.getUuid()); } catch (SrampClientException e) { } catch (SrampAtomException e) { } if (artifact != null) { if (event.getProcessInstance().getState() == ProcessInstance.STATE_ABORTED) { SrampModelUtils.setCustomProperty(artifact, DtgovModel.CUSTOM_PROPERTY_STATUS, WorkflowStatusEnum.ABORTED.name()); } else if (event.getProcessInstance().getState() == ProcessInstance.STATE_COMPLETED) { SrampModelUtils.setCustomProperty(artifact, DtgovModel.CUSTOM_PROPERTY_STATUS, WorkflowStatusEnum.COMPLETED.name()); } try { client.updateArtifactMetaData(artifact); } catch (SrampClientException e) { } catch (SrampAtomException e) { } } } } /* * (non-Javadoc) * * @see * org.kie.api.event.process.ProcessEventListener#beforeNodeTriggered(org * .kie.api.event.process.ProcessNodeTriggeredEvent) */ @Override public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) { } /* * (non-Javadoc) * * @see * org.kie.api.event.process.ProcessEventListener#afterNodeTriggered(org * .kie.api.event.process.ProcessNodeTriggeredEvent) */ @Override public void afterNodeTriggered(ProcessNodeTriggeredEvent event) { } /* * (non-Javadoc) * * @see * org.kie.api.event.process.ProcessEventListener#beforeNodeLeft(org.kie * .api.event.process.ProcessNodeLeftEvent) */ @Override public void beforeNodeLeft(ProcessNodeLeftEvent event) { } /* * (non-Javadoc) * * @see * org.kie.api.event.process.ProcessEventListener#afterNodeLeft(org.kie. * api.event.process.ProcessNodeLeftEvent) */ @Override public void afterNodeLeft(ProcessNodeLeftEvent event) { } /* * (non-Javadoc) * * @see * org.kie.api.event.process.ProcessEventListener#beforeVariableChanged( * org.kie.api.event.process.ProcessVariableChangedEvent) */ @Override public void beforeVariableChanged(ProcessVariableChangedEvent event) { } /* * (non-Javadoc) * * @see * org.kie.api.event.process.ProcessEventListener#afterVariableChanged(org * .kie.api.event.process.ProcessVariableChangedEvent) */ @Override public void afterVariableChanged(ProcessVariableChangedEvent event) { } }