diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java index f4afdcdcb2..436ea67fde 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java @@ -526,19 +526,6 @@ protected TriggerRouter buildTriggerRoutersForSymmetricTables(String version, Tr return triggerRouter; } - private String getTriggerRouterSql() { - return getTriggerRouterSql(null); - } - - private String getTriggerRouterSql(String sql) { - return getSql("select ", "selectTriggersColumnList", ",", "selectRoutersColumnList", ",", - "selectTriggerRoutersColumnList", "selectTriggerRoutersSql", sql); - } - - public List getTriggerRouters() { - return sqlTemplate.query(getTriggerRouterSql(), new TriggerRouterMapper(configurationService.getNodeGroupLinks(false))); - } - public Set getTriggerRouterForTableForCurrentNode(String catalogName, String schemaName, String tableName, boolean refreshCache) { return getTriggerRouterForTableForCurrentNode(null, catalogName, schemaName, tableName, @@ -796,32 +783,59 @@ public List getRouters() { return sqlTemplate.query(getSql("select ", "selectRoutersColumnList", "selectRoutersSql"), new RouterMapper(configurationService.getNodeGroupLinks(false))); } + + private String getTriggerRouterSql(String sql) { + return getSql("select ", "selectTriggerRoutersColumnList", "selectTriggerRoutersSql", sql); + } + + public List getTriggerRouters() { + return enhanceTriggerRouters(sqlTemplate.query(getTriggerRouterSql(null), new TriggerRouterMapper())); + } public List getAllTriggerRoutersForCurrentNode(String sourceNodeGroupId) { - List triggerRouters = (List) sqlTemplate.query( + List triggerRouters = enhanceTriggerRouters(sqlTemplate.query( getTriggerRouterSql("activeTriggersForSourceNodeGroupSql"), - new TriggerRouterMapper(configurationService.getNodeGroupLinks(false)), sourceNodeGroupId); + new TriggerRouterMapper(), sourceNodeGroupId)); mergeInConfigurationTablesTriggerRoutersForCurrentNode(sourceNodeGroupId, triggerRouters); return triggerRouters; } public List getAllTriggerRoutersForReloadForCurrentNode( String sourceNodeGroupId, String targetNodeGroupId) { - return sqlTemplate.query( - getTriggerRouterSql("activeTriggersForReloadSql"), new TriggerRouterMapper(configurationService.getNodeGroupLinks(false)), - sourceNodeGroupId, targetNodeGroupId, Constants.CHANNEL_CONFIG); + return enhanceTriggerRouters(sqlTemplate.query( + getTriggerRouterSql("activeTriggersForReloadSql"), new TriggerRouterMapper(), + sourceNodeGroupId, targetNodeGroupId, Constants.CHANNEL_CONFIG)); } public TriggerRouter findTriggerRouterById(String triggerId, String routerId) { List configs = (List) sqlTemplate.query( - getTriggerRouterSql("selectTriggerRouterSql"), new TriggerRouterMapper(configurationService.getNodeGroupLinks(false)), + getTriggerRouterSql("selectTriggerRouterSql"), new TriggerRouterMapper(), triggerId, routerId); if (configs.size() > 0) { - return configs.get(0); + TriggerRouter triggerRouter = configs.get(0); + triggerRouter.setRouter(getRouterById(triggerRouter.getRouter().getRouterId())); + triggerRouter.setTrigger(getTriggerById(triggerRouter.getTrigger().getTriggerId())); + return triggerRouter; } else { return null; } } + + private List enhanceTriggerRouters(List triggerRouters) { + HashMap routersById = new HashMap(); + for (Router router : getRouters()) { + routersById.put(router.getRouterId(), router); + } + HashMap triggersById = new HashMap(); + for (Trigger trigger : getTriggers()) { + triggersById.put(trigger.getTriggerId(), trigger); + } + for (TriggerRouter triggerRouter : triggerRouters) { + triggerRouter.setTrigger(triggersById.get(triggerRouter.getTrigger().getTriggerId())); + triggerRouter.setRouter(routersById.get(triggerRouter.getRouter().getRouterId())); + } + return triggerRouters; + } public List getTriggerRoutersFor(String tableName, String sourceNodeGroupId) { List results = new ArrayList(); @@ -853,22 +867,16 @@ public Map> getTriggerRoutersByChannel(String nodeGr || System.currentTimeMillis() - this.triggerRouterPerChannelCacheTime > triggerRouterCacheTimeoutInMs) { final Map> newValue = new HashMap>(); this.triggerRouterPerChannelCacheTime = System.currentTimeMillis(); - sqlTemplate.query(getTriggerRouterSql("selectGroupTriggersSql"), - new TriggerRouterMapper(configurationService.getNodeGroupLinks(false)) { - @Override - public TriggerRouter mapRow(Row rs) { - TriggerRouter tr = super.mapRow(rs); - List list = newValue.get(tr - .getTrigger().getChannelId()); - if (list == null) { - list = new ArrayList(); - newValue.put(tr.getTrigger() - .getChannelId(), list); - } - list.add(tr); - return tr; - }; - }, nodeGroupId, nodeGroupId); + List triggerRouters = enhanceTriggerRouters(sqlTemplate.query( + getTriggerRouterSql("selectGroupTriggersSql"), new TriggerRouterMapper(), nodeGroupId, nodeGroupId)); + for (TriggerRouter triggerRouter : triggerRouters) { + List list = newValue.get(triggerRouter.getTrigger().getChannelId()); + if (list == null) { + list = new ArrayList(); + newValue.put(triggerRouter.getTrigger().getChannelId(), list); + } + list.add(triggerRouter); + } triggerRouterCacheByChannel = newValue; testValue = newValue; } @@ -1892,20 +1900,18 @@ public Trigger mapRow(Row rs) { class TriggerRouterMapper implements ISqlRowMapper { - private TriggerMapper triggerMapper; - private RouterMapper routerMapper; - - public TriggerRouterMapper(List nodeGroupLinks) { - routerMapper = new RouterMapper(nodeGroupLinks); - triggerMapper = new TriggerMapper(); + public TriggerRouterMapper() { } public TriggerRouter mapRow(Row rs) { TriggerRouter triggerRouter = new TriggerRouter(); - triggerRouter.setTrigger(triggerMapper.mapRow(rs)); - triggerRouter.setRouter(routerMapper.mapRow(rs)); - + Trigger trigger = new Trigger(); + trigger.setTriggerId(rs.getString("trigger_id")); + triggerRouter.setTrigger(trigger); + Router router = new Router(); + router.setRouterId(rs.getString("router_id")); + triggerRouter.setRouter(router); triggerRouter.setCreateTime(rs.getDateTime("create_time")); triggerRouter.setLastUpdateTime(rs.getDateTime("last_update_time")); triggerRouter.setLastUpdateBy(rs.getString("last_update_by")); diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterServiceSqlMap.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterServiceSqlMap.java index 8ef7a2eaa4..ceb8009e0d 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterServiceSqlMap.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterServiceSqlMap.java @@ -59,8 +59,7 @@ public TriggerRouterServiceSqlMap(IDatabasePlatform platform, + " inner join $(router) r on tr.router_id=r.router_id "); putSql("selectTriggerRoutersColumnList", - "" - + " tr.create_time,tr.last_update_time,tr.last_update_by,tr.initial_load_order,tr.initial_load_select,tr.initial_load_delete_stmt,tr.initial_load_batch_count,tr.ping_back_enabled, tr.enabled "); + " tr.trigger_id, tr.router_id, tr.create_time, tr.last_update_time, tr.last_update_by, tr.initial_load_order, tr.initial_load_select, tr.initial_load_delete_stmt, tr.initial_load_batch_count, tr.ping_back_enabled, tr.enabled "); putSql("selectRoutersColumnList", ""