/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * 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.jbpm.casemgmt.impl.event; import java.util.Iterator; import java.util.List; import java.util.Map; import org.drools.core.event.AbstractEventSupport; import org.jbpm.casemgmt.api.event.CaseCancelEvent; import org.jbpm.casemgmt.api.event.CaseCommentEvent; import org.jbpm.casemgmt.api.event.CaseDataEvent; import org.jbpm.casemgmt.api.event.CaseDestroyEvent; import org.jbpm.casemgmt.api.event.CaseDynamicSubprocessEvent; import org.jbpm.casemgmt.api.event.CaseDynamicTaskEvent; import org.jbpm.casemgmt.api.event.CaseEventListener; import org.jbpm.casemgmt.api.event.CaseReopenEvent; import org.jbpm.casemgmt.api.event.CaseRoleAssignmentEvent; import org.jbpm.casemgmt.api.event.CaseStartEvent; import org.jbpm.casemgmt.api.model.instance.CaseFileInstance; import org.jbpm.casemgmt.api.model.instance.CommentInstance; import org.kie.api.task.model.OrganizationalEntity; import org.kie.internal.identity.IdentityProvider; /** * Responsible for firing case related events to notify registered CaseEventListeners * */ public class CaseEventSupport extends AbstractEventSupport<CaseEventListener> { private IdentityProvider identityProvider; public CaseEventSupport(IdentityProvider identityProvider, List<CaseEventListener> caseEventListeners) { this.identityProvider = identityProvider; if (caseEventListeners != null) { caseEventListeners.forEach( cvl -> addEventListener(cvl)); } } /* * fire*CaseStarted */ public void fireBeforeCaseStarted(String caseId, String deploymentId, String caseDefinitionId, CaseFileInstance caseFile) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseStartEvent event = new CaseStartEvent(identityProvider.getName(), caseId, deploymentId, caseDefinitionId, caseFile); do{ iter.next().beforeCaseStarted(event); } while (iter.hasNext()); } } public void fireAfterCaseStarted(String caseId, String deploymentId, String caseDefinitionId, CaseFileInstance caseFile, long processInstanceId) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseStartEvent event = new CaseStartEvent(identityProvider.getName(), caseId, deploymentId, caseDefinitionId, caseFile, processInstanceId); do { iter.next().afterCaseStarted(event); } while (iter.hasNext()); } } /* * fire*CaseCancelled */ public void fireBeforeCaseCancelled(String caseId, List<Long> processInstanceIds) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseCancelEvent event = new CaseCancelEvent(identityProvider.getName(), caseId, processInstanceIds); do{ iter.next().beforeCaseCancelled(event); } while (iter.hasNext()); } } public void fireAfterCaseCancelled(String caseId, List<Long> processInstanceIds) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseCancelEvent event = new CaseCancelEvent(identityProvider.getName(), caseId, processInstanceIds); do { iter.next().afterCaseCancelled(event); } while (iter.hasNext()); } } /* * fire*CaseDestroyed */ public void fireBeforeCaseDestroyed(String caseId, List<Long> processInstanceIds) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseDestroyEvent event = new CaseDestroyEvent(identityProvider.getName(), caseId, processInstanceIds); do{ iter.next().beforeCaseDestroyed(event); } while (iter.hasNext()); } } public void fireAfterCaseDestroyed(String caseId, List<Long> processInstanceIds) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseDestroyEvent event = new CaseDestroyEvent(identityProvider.getName(), caseId, processInstanceIds); do { iter.next().afterCaseDestroyed(event); } while (iter.hasNext()); } } /* * fire*CaseReopened */ public void fireBeforeCaseReopened(String caseId, String deploymentId, String caseDefinitionId, Map<String, Object> data) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseReopenEvent event = new CaseReopenEvent(identityProvider.getName(), caseId, deploymentId, caseDefinitionId, data); do{ iter.next().beforeCaseReopen(event); } while (iter.hasNext()); } } public void fireAfterCaseReopened(String caseId, String deploymentId, String caseDefinitionId, Map<String, Object> data, long processInstanceId) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseReopenEvent event = new CaseReopenEvent(identityProvider.getName(), caseId, deploymentId, caseDefinitionId, data, processInstanceId); do { iter.next().afterCaseReopen(event); } while (iter.hasNext()); } } /* * fire*CaseCommentAdded */ public void fireBeforeCaseCommentAdded(String caseId, CommentInstance commentInstance) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseCommentEvent event = new CaseCommentEvent(identityProvider.getName(), caseId, commentInstance); do { iter.next().beforeCaseCommentAdded(event); } while (iter.hasNext()); } } public void fireAfterCaseCommentAdded(String caseId, CommentInstance commentInstance) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseCommentEvent event = new CaseCommentEvent(identityProvider.getName(), caseId, commentInstance); do { iter.next().beforeCaseCommentAdded(event); } while (iter.hasNext()); } } /* * fire*CaseCommentUpdated */ public void fireBeforeCaseCommentUpdated(String caseId, CommentInstance commentInstance) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseCommentEvent event = new CaseCommentEvent(identityProvider.getName(), caseId, commentInstance); do { iter.next().beforeCaseCommentUpdated(event); } while (iter.hasNext()); } } public void fireAfterCaseCommentUpdated(String caseId, CommentInstance commentInstance) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseCommentEvent event = new CaseCommentEvent(identityProvider.getName(), caseId, commentInstance); do { iter.next().beforeCaseCommentUpdated(event); } while (iter.hasNext()); } } /* * fire*CaseCommentRemoved */ public void fireBeforeCaseCommentRemoved(String caseId, CommentInstance commentInstance) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseCommentEvent event = new CaseCommentEvent(identityProvider.getName(), caseId, commentInstance); do { iter.next().beforeCaseCommentRemoved(event); } while (iter.hasNext()); } } public void fireAfterCaseCommentRemoved(String caseId, CommentInstance commentInstance) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseCommentEvent event = new CaseCommentEvent(identityProvider.getName(), caseId, commentInstance); do { iter.next().beforeCaseCommentRemoved(event); } while (iter.hasNext()); } } /* * fire*CaseRoleAssignmentAdded */ public void fireBeforeCaseRoleAssignmentAdded(String caseId, String role, OrganizationalEntity entity) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseRoleAssignmentEvent event = new CaseRoleAssignmentEvent(identityProvider.getName(), caseId, role, entity); do { iter.next().beforeCaseRoleAssignmentAdded(event); } while (iter.hasNext()); } } public void fireAfterCaseRoleAssignmentAdded(String caseId, String role, OrganizationalEntity entity) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseRoleAssignmentEvent event = new CaseRoleAssignmentEvent(identityProvider.getName(), caseId, role, entity); do { iter.next().afterCaseRoleAssignmentAdded(event); } while (iter.hasNext()); } } /* * fire*CaseRoleAssignmentRemoved */ public void fireBeforeCaseRoleAssignmentRemoved(String caseId, String role, OrganizationalEntity entity) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseRoleAssignmentEvent event = new CaseRoleAssignmentEvent(identityProvider.getName(), caseId, role, entity); do { iter.next().beforeCaseRoleAssignmentRemoved(event); } while (iter.hasNext()); } } public void fireAfterCaseRoleAssignmentRemoved(String caseId, String role, OrganizationalEntity entity) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseRoleAssignmentEvent event = new CaseRoleAssignmentEvent(identityProvider.getName(), caseId, role, entity); do { iter.next().afterCaseRoleAssignmentRemoved(event); } while (iter.hasNext()); } } /* * fire*CaseDataAdded */ public void fireBeforeCaseDataAdded(String caseId, String definitionId, Map<String, Object> data) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseDataEvent event = new CaseDataEvent(identityProvider.getName(), caseId, definitionId, data); do { iter.next().beforeCaseDataAdded(event); } while (iter.hasNext()); } } public void fireAfterCaseDataAdded(String caseId, String definitionId, Map<String, Object> data) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseDataEvent event = new CaseDataEvent(identityProvider.getName(), caseId, definitionId, data); do { iter.next().afterCaseDataAdded(event); } while (iter.hasNext()); } } /* * fire*CaseDataRemoved */ public void fireBeforeCaseDataRemoved(String caseId, String definitionId, Map<String, Object> data) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseDataEvent event = new CaseDataEvent(identityProvider.getName(), caseId, definitionId, data); do { iter.next().beforeCaseDataRemoved(event); } while (iter.hasNext()); } } public void fireAfterCaseDataRemoved(String caseId, String definitionId, Map<String, Object> data) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseDataEvent event = new CaseDataEvent(identityProvider.getName(), caseId, definitionId, data); do { iter.next().afterCaseDataRemoved(event); } while (iter.hasNext()); } } /* * fire*CaseDynamicTaskAdded */ public void fireBeforeDynamicTaskAdded(String caseId, long processInstanceId, String nodeType, Map<String, Object> parameters) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseDynamicTaskEvent event = new CaseDynamicTaskEvent(identityProvider.getName(), caseId, nodeType, parameters, processInstanceId); do { iter.next().beforeDynamicTaskAdded(event); } while (iter.hasNext()); } } public void fireAfterDynamicTaskAdded(String caseId, long processInstanceId, String nodeType, Map<String, Object> parameters) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseDynamicTaskEvent event = new CaseDynamicTaskEvent(identityProvider.getName(), caseId, nodeType, parameters, processInstanceId); do { iter.next().afterDynamicTaskAdded(event); } while (iter.hasNext()); } } /* * fire*CaseDynamicProcessAdded */ public void fireBeforeDynamicProcessAdded(String caseId, long processInstanceId, String processId, Map<String, Object> parameters) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseDynamicSubprocessEvent event = new CaseDynamicSubprocessEvent(identityProvider.getName(), caseId, processId, parameters, processInstanceId); do { iter.next().beforeDynamicProcessAdded(event); } while (iter.hasNext()); } } public void fireAfterDynamicProcessAdded(String caseId, long processInstanceId, String processId, Map<String, Object> parameters, long subProcessInstanceId) { final Iterator<CaseEventListener> iter = getEventListenersIterator(); if (iter.hasNext()) { final CaseDynamicSubprocessEvent event = new CaseDynamicSubprocessEvent(identityProvider.getName(), caseId, processId, parameters, processInstanceId, subProcessInstanceId); do { iter.next().afterDynamicProcessAdded(event); } while (iter.hasNext()); } } public void reset() { this.clear(); } }