/** * 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.model; import java.io.Serializable; import java.util.Date; import org.apache.commons.lang.StringUtils; import org.jumpmind.symmetric.io.data.DataEventType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Defines the trigger via which a table will be synchronized. */ public class TriggerRouter implements Serializable { private static final long serialVersionUID = 1L; static final Logger logger = LoggerFactory.getLogger(TriggerRouter.class); private boolean enabled = true; /** * This is the order in which the definitions will be processed. */ private int initialLoadOrder = 50; private String initialLoadSelect; private String initialLoadDeleteStmt; private int initialLoadBatchCount = 1; private Trigger trigger; private Router router; private Date createTime; private Date lastUpdateTime; private String lastUpdateBy; private boolean pingBackEnabled = false; public TriggerRouter() { this(new Trigger(), new Router()); } public TriggerRouter(Trigger trigger, Router router) { this.trigger = trigger; this.router = router; createTime = new Date(); lastUpdateTime = new Date(); } public void setEnabled(boolean enabled) { this.enabled = enabled; } public boolean isEnabled() { return enabled; } public Date getCreateTime() { return createTime; } public Date getLastUpdateTime() { return lastUpdateTime; } public String getLastUpdateBy() { return lastUpdateBy; } public void setCreateTime(Date createdOn) { this.createTime = createdOn; } public void setLastUpdateTime(Date lastModifiedOn) { this.lastUpdateTime = lastModifiedOn; } public void setLastUpdateBy(String updatedBy) { this.lastUpdateBy = updatedBy; } public int getInitialLoadOrder() { return initialLoadOrder; } public void setInitialLoadOrder(int order) { this.initialLoadOrder = order; } public void setRouter(Router router) { this.router = router; } public Router getRouter() { return router; } public void setTrigger(Trigger trigger) { this.trigger = trigger; } public Trigger getTrigger() { return trigger; } public void setInitialLoadSelect(String initialLoadSelect) { this.initialLoadSelect = initialLoadSelect; } public String getInitialLoadSelect() { return initialLoadSelect; } public String getInitialLoadDeleteStmt() { return initialLoadDeleteStmt; } public void setInitialLoadDeleteStmt(String initialLoadDeleteStmt) { this.initialLoadDeleteStmt = initialLoadDeleteStmt; } public void setInitialLoadBatchCount(int initialLoadBatchCount) { this.initialLoadBatchCount = initialLoadBatchCount; } public int getInitialLoadBatchCount() { return initialLoadBatchCount; } public boolean isRouted(DataEventType event) { switch (event) { case INSERT: return router.isSyncOnInsert(); case DELETE: return router.isSyncOnDelete(); case UPDATE: return router.isSyncOnUpdate(); default: return true; } } public String getTargetSchema(String defaultSchema) { if (router != null && !StringUtils.isBlank(router.getTargetSchemaName())) { return router.getTargetSchemaName(); } else { return defaultSchema; } } public String getTargetCatalog(String defaultCatalog) { if (router != null && !StringUtils.isBlank(router.getTargetCatalogName())) { return router.getTargetCatalogName(); } else { return defaultCatalog; } } public String getTargetTable(TriggerHistory triggerHistory) { if (router != null && !StringUtils.isBlank(router.getTargetTableName())) { return router.getTargetTableName(); } if (triggerHistory != null) { return triggerHistory.getSourceTableName(); } if (trigger != null && !StringUtils.isBlank(trigger.getSourceTableName())) { return trigger.getSourceTableName(); } else { return null; } } public String qualifiedTargetTableName(TriggerHistory triggerHistory) { String catalog = getTargetCatalog(null); String schema = getTargetSchema(null); String tableName = getTargetTable(triggerHistory); if (!StringUtils.isBlank(schema)) { tableName = schema + "." + tableName; } if (!StringUtils.isBlank(catalog)) { tableName = catalog + "." + tableName; } return tableName; } public void setPingBackEnabled(boolean pingBackEnabled) { this.pingBackEnabled = pingBackEnabled; } public boolean isPingBackEnabled() { return pingBackEnabled; } public boolean isSame(TriggerRouter triggerRouter) { return (this.trigger == null && triggerRouter.trigger == null) || (this.trigger != null && triggerRouter.trigger != null && this.trigger .matches(triggerRouter.trigger)) && (this.router == null && triggerRouter.router == null) || (this.router != null && triggerRouter.router != null && this.router .equals(triggerRouter.router)); } @Override public String toString() { return (trigger != null ? trigger.toString() : "") + ":" + (router != null ? router.toString() : ""); } public String getIdentifier() { return getTrigger().getTriggerId() + getRouter().getRouterId(); } public String getTriggerId() { return this.trigger != null ? this.trigger.getTriggerId() : null; } public String getRouterId() { return this.router != null ? this.router.getRouterId() : null; } public void setTriggerId(String triggerId) { if (this.trigger == null) { this.trigger = new Trigger(); } this.trigger.setTriggerId(triggerId); } public void setRouterId(String routerId) { if (this.router == null) { this.router = new Router(); } this.router.setRouterId(routerId); } }