/* 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.activiti.engine.impl.persistence.entity; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.activiti.engine.impl.EventSubscriptionQueryImpl; import org.activiti.engine.impl.Page; import org.activiti.engine.impl.persistence.AbstractManager; /** * @author Daniel Meyer */ public class EventSubscriptionManager extends AbstractManager { /** keep track of subscriptions created in the current command */ protected List<SignalEventSubscriptionEntity> createdSignalSubscriptions = new ArrayList<SignalEventSubscriptionEntity>(); public void insert(EventSubscriptionEntity persistentObject) { super.insert(persistentObject); if(persistentObject instanceof SignalEventSubscriptionEntity) { createdSignalSubscriptions.add((SignalEventSubscriptionEntity)persistentObject); } } public void deleteEventSubscription(EventSubscriptionEntity persistentObject) { getDbSqlSession().delete(persistentObject); if(persistentObject instanceof SignalEventSubscriptionEntity) { createdSignalSubscriptions.remove(persistentObject); } } public EventSubscriptionEntity findEventSubscriptionbyId(String id) { return (EventSubscriptionEntity) getDbSqlSession().selectOne("selectEventSubscription", id); } public long findEventSubscriptionCountByQueryCriteria(EventSubscriptionQueryImpl eventSubscriptionQueryImpl) { final String query = "selectEventSubscriptionCountByQueryCriteria"; return (Long) getDbSqlSession().selectOne(query, eventSubscriptionQueryImpl); } @SuppressWarnings("unchecked") public List<EventSubscriptionEntity> findEventSubscriptionsByQueryCriteria(EventSubscriptionQueryImpl eventSubscriptionQueryImpl, Page page) { final String query = "selectEventSubscriptionByQueryCriteria"; return getDbSqlSession().selectList(query, eventSubscriptionQueryImpl, page); } @SuppressWarnings("unchecked") public List<SignalEventSubscriptionEntity> findSignalEventSubscriptionsByEventName(String eventName) { final String query = "selectSignalEventSubscriptionsByEventName"; Set<SignalEventSubscriptionEntity> selectList = new HashSet<SignalEventSubscriptionEntity>( getDbSqlSession().selectList(query, eventName)); // add events created in this command (not visible yet in query) for (SignalEventSubscriptionEntity entity : createdSignalSubscriptions) { if(eventName.equals(entity.getEventName())) { selectList.add(entity); } } return new ArrayList<SignalEventSubscriptionEntity>(selectList); } @SuppressWarnings("unchecked") public List<SignalEventSubscriptionEntity> findSignalEventSubscriptionsByExecution(String executionId) { final String query = "selectSignalEventSubscriptionsByExecution"; Set<SignalEventSubscriptionEntity> selectList = new HashSet<SignalEventSubscriptionEntity>( getDbSqlSession().selectList(query, executionId)); // add events created in this command (not visible yet in query) for (SignalEventSubscriptionEntity entity : createdSignalSubscriptions) { if(executionId.equals(entity.getExecutionId())) { selectList.add((SignalEventSubscriptionEntity) entity); } } return new ArrayList<SignalEventSubscriptionEntity>(selectList); } @SuppressWarnings("unchecked") public List<SignalEventSubscriptionEntity> findSignalEventSubscriptionsByNameAndExecution(String name, String executionId) { final String query = "selectSignalEventSubscriptionsByNameAndExecution"; Map<String,String> params = new HashMap<String, String>(); params.put("executionId", executionId); params.put("eventName", name); Set<SignalEventSubscriptionEntity> selectList = new HashSet<SignalEventSubscriptionEntity>( getDbSqlSession().selectList(query, params)); // add events created in this command (not visible yet in query) for (SignalEventSubscriptionEntity entity : createdSignalSubscriptions) { if(executionId.equals(entity.getExecutionId()) && name.equals(entity.getEventName())) { selectList.add((SignalEventSubscriptionEntity) entity); } } return new ArrayList<SignalEventSubscriptionEntity>(selectList); } public List<EventSubscriptionEntity> findEventSubscriptionsByExecutionAndType(String executionId, String type) { final String query = "selectEventSubscriptionsByExecutionAndType"; Map<String,String> params = new HashMap<String, String>(); params.put("executionId", executionId); params.put("eventType", type); return getDbSqlSession().selectList(query, params); } public List<EventSubscriptionEntity> findEventSubscriptionsByExecution(String executionId) { final String query = "selectEventSubscriptionsByExecution"; return getDbSqlSession().selectList(query, executionId); } public List<EventSubscriptionEntity> findEventSubscriptions(String executionId, String type, String activityId) { final String query = "selectEventSubscriptionsByExecutionTypeAndActivity"; Map<String,String> params = new HashMap<String, String>(); params.put("executionId", executionId); params.put("eventType", type); params.put("activityId", activityId); return getDbSqlSession().selectList(query, params); } public List<EventSubscriptionEntity> findEventSubscriptionsByConfiguration(String type, String configuration) { final String query = "selectEventSubscriptionsByConfiguration"; Map<String,String> params = new HashMap<String, String>(); params.put("eventType", type); params.put("configuration", configuration); return getDbSqlSession().selectList(query, params); } public List<EventSubscriptionEntity> findEventSubscriptionsByName(String type, String eventName) { final String query = "selectEventSubscriptionsByName"; Map<String,String> params = new HashMap<String, String>(); params.put("eventType", type); params.put("eventName", eventName); return getDbSqlSession().selectList(query, params); } public List<EventSubscriptionEntity> findEventSubscriptionsByNameAndExecution(String type, String eventName, String executionId) { final String query = "selectEventSubscriptionsByNameAndExecution"; Map<String,String> params = new HashMap<String, String>(); params.put("eventType", type); params.put("eventName", eventName); params.put("executionId", executionId); return getDbSqlSession().selectList(query, params); } public MessageEventSubscriptionEntity findMessageStartEventSubscriptionByName(String messageName) { MessageEventSubscriptionEntity entity = (MessageEventSubscriptionEntity) getDbSqlSession().selectOne("selectMessageStartEventSubscriptionByName", messageName); return entity; } }