/** * Licensed to JumpMind Inc under one or more contributor * license agreements. See the NOTICE file distributed * with this work for additional information regarding * copyright ownership. JumpMind Inc licenses this file * to you under the GNU General Public License, version 3.0 (GPLv3) * (the "License"); you may not use this file except in compliance * with the License. * * You should have received a copy of the GNU General Public License, * version 3.0 (GPLv3) along with this library; if not, see * <http://www.gnu.org/licenses/>. * * 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.jumpmind.symmetric.service; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import org.jumpmind.db.model.Table; import org.jumpmind.symmetric.config.ITriggerCreationListener; import org.jumpmind.symmetric.model.NodeGroupLink; import org.jumpmind.symmetric.model.Router; import org.jumpmind.symmetric.model.Trigger; import org.jumpmind.symmetric.model.TriggerHistory; import org.jumpmind.symmetric.model.TriggerRouter; /** * Provides an API to configure {@link TriggerRouter}s, {@link Trigger}s and {@link Router}s. */ public interface ITriggerRouterService { public boolean refreshFromDatabase(); public List<TriggerHistory> getActiveTriggerHistoriesFromCache(); public List<TriggerHistory> getActiveTriggerHistories(); public List<TriggerHistory> getActiveTriggerHistories(Trigger trigger); public List<TriggerHistory> getActiveTriggerHistories(String tableName); public List<TriggerRouter> getTriggerRouters(boolean substituteParameters, boolean refreshCache); /** * Return a list of triggers used when extraction configuration data during * the registration process. * @param sourceGroupId group id of the node being registered with * @param targetGroupId group id of the node that is registering */ public List<TriggerRouter> buildTriggerRoutersForSymmetricTables(String version, NodeGroupLink nodeGroupLink, String... tablesToExclude); public String buildSymmetricTableRouterId(String triggerId, String sourceNodeGroupId, String targetNodeGroupId); public TriggerRouter getTriggerRouterForCurrentNode(String triggerId, String routerId, boolean refreshCache); /** * Returns a list of triggers that should be active for the current node. * @param refreshCache Indicates that the cache should be refreshed */ public List<Trigger> getTriggersForCurrentNode(boolean refreshCache); /** * Returns a map of trigger routers keyed by trigger id. * @param refreshCache Indicates that the cache should be refreshed */ public Map<String, List<TriggerRouter>> getTriggerRoutersForCurrentNode(boolean refreshCache); /** * Get router that is currently in use by a trigger router at the node that is hosting this call. * @param routerId The router_id to retrieve * @param refreshCache Whether to force the router to be re-retrieved from the database */ public Router getActiveRouterByIdForCurrentNode(String routerId, boolean refreshCache); public Router getRouterById(boolean substituteParameters, String routerId); public Router getRouterById(boolean substituteParameters, String routerId, boolean refreshCache); public List<Router> getRouters(boolean substituteParameters); /** * Get a list of routers for a specific node group link. */ public List<Router> getRoutersByGroupLink(NodeGroupLink link); public boolean isRouterBeingUsed(String routerId); public void deleteRouter(Router router); public void saveRouter(Router router); /** * Get a list of all the triggers that have been defined for the system. */ public List<Trigger> getTriggers(boolean substituteParameters); public void saveTrigger(Trigger trigger); public void deleteTrigger(Trigger trigger); public void dropTriggers(); public void dropTriggers(Set<String> tables); public void createTriggersOnChannelForTables(String channelId, String catalogName, String schemaName, List<String> tables, String lastUpdateBy); public List<Trigger> createTriggersOnChannelForTablesWithReturn(String channelId, String catalogName, String schemaName, List<String> tables, String lastUpdateBy); public boolean isTriggerBeingUsed(String triggerId); public boolean doesTriggerExist(String triggerId); public boolean doesTriggerExistForTable(String tableName); public List<TriggerRouter> getAllTriggerRoutersForReloadForCurrentNode(String sourceNodeGroupId, String targetNodeGroupId); public Set<TriggerRouter> getTriggerRouterForTableForCurrentNode(boolean substituteParameters, NodeGroupLink link, String catalogName, String schemaName, String tableName, boolean refreshCache); public Set<TriggerRouter> getTriggerRouterForTableForCurrentNode(boolean substituteParameters, String catalog, String schema, String tableName, boolean refreshCache); public TriggerRouter findTriggerRouterById(boolean substituteParameters, String triggerId, String routerId); public void inactivateTriggerHistory(TriggerHistory history); public TriggerHistory getNewestTriggerHistoryForTrigger(String triggerId, String catalogName, String schemaName, String tableName); public TriggerHistory getTriggerHistory(int historyId); public List<TriggerHistory> findTriggerHistories(String catalogName, String schemaName, String tableName); public TriggerHistory findTriggerHistory(String catalogName, String schemaName, String tableName); public Trigger getTriggerById(boolean substituteParameters, String triggerId); public Trigger getTriggerById(boolean substituteParameters, String triggerId, boolean refreshCache); public void insert(TriggerHistory newAuditRecord); public Map<Long, TriggerHistory> getHistoryRecords(); public void deleteTriggerRouter(TriggerRouter triggerRouter); public void deleteTriggerRouter(String triggerId, String routerId); public void saveTriggerRouter(TriggerRouter triggerRouter, boolean updateTriggerRouterTableOnly); public void saveTriggerRouter(TriggerRouter triggerRouter); public void syncTrigger(String triggerId, ITriggerCreationListener listener); public void syncTriggers(Table table, boolean genAlways); public void dropTriggers(TriggerHistory history); public void syncTriggers(boolean genAlways); public void syncTriggers(); public void syncTriggers(StringBuilder sqlBuffer, boolean genAlways); public void addExtraConfigTable(String table); public Map<Trigger, Exception> getFailedTriggers(); public Map<Integer, List<TriggerRouter>> fillTriggerRoutersByHistIdAndSortHist( String sourceNodeGroupId, String targetNodeGroupId, List<TriggerHistory> triggerHistories); public TriggerHistory findTriggerHistoryForGenericSync(); public void clearCache(); public Collection<Trigger> findMatchingTriggers(List<Trigger> triggers, String catalog, String schema, String table); }