/** * 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.io.data.writer; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.jumpmind.db.model.Table; import org.jumpmind.symmetric.io.data.Batch; public class DatabaseWriterSettings { protected long maxRowsBeforeCommit = 10000; // Milliseconds to sleep between commits. protected long commitSleepInterval = 5; protected boolean treatDateTimeFieldsAsVarchar = false; protected boolean usePrimaryKeysFromSource = true; protected Conflict defaultConflictSetting; protected boolean createTableFailOnError = true; protected boolean alterTable = true; protected boolean createTableDropFirst = false; protected boolean applyChangesOnly = true; protected boolean createTableAlterCaseToMatchDatabaseDefault = false; protected boolean ignoreMissingTables = true; protected boolean saveCurrentValueOnError = false; protected boolean fitToColumn = false; protected String textColumnExpression; protected Map<String, Conflict> conflictSettingsByChannel; protected Map<String, Conflict> conflictSettingsByTable; protected List<IDatabaseWriterFilter> databaseWriterFilters; protected List<IDatabaseWriterErrorHandler> databaseWriterErrorHandlers; protected List<ResolvedData> resolvedData; public boolean isAlterTable() { return alterTable; } public void setAlterTable(boolean alterTable) { this.alterTable = alterTable; } public boolean isCreateTableDropFirst() { return createTableDropFirst; } public void setCreateTableDropFirst(boolean createTableDropFirst) { this.createTableDropFirst = createTableDropFirst; } public boolean isCreateTableFailOnError() { return createTableFailOnError; } public void setCreateTableFailOnError(boolean createTableFailOnError) { this.createTableFailOnError = createTableFailOnError; } public long getMaxRowsBeforeCommit() { return maxRowsBeforeCommit; } public void setMaxRowsBeforeCommit(long maxRowsBeforeCommit) { this.maxRowsBeforeCommit = maxRowsBeforeCommit; } public boolean isTreatDateTimeFieldsAsVarchar() { return treatDateTimeFieldsAsVarchar; } public void setTreatDateTimeFieldsAsVarchar(boolean treatDateTimeFieldsAsVarchar) { this.treatDateTimeFieldsAsVarchar = treatDateTimeFieldsAsVarchar; } public boolean isUsePrimaryKeysFromSource() { return usePrimaryKeysFromSource; } public void setUsePrimaryKeysFromSource(boolean usePrimaryKeysFromSource) { this.usePrimaryKeysFromSource = usePrimaryKeysFromSource; } public Conflict getDefaultConflictSetting() { return defaultConflictSetting; } public void setDefaultConflictSetting(Conflict defaultConflictSetting) { this.defaultConflictSetting = defaultConflictSetting; } public boolean isCreateTableAlterCaseToMatchDatabaseDefault() { return createTableAlterCaseToMatchDatabaseDefault; } public void setCreateTableAlterCaseToMatchDatabaseDefault( boolean createTableAlterCaseToMatchDatabaseDefault) { this.createTableAlterCaseToMatchDatabaseDefault = createTableAlterCaseToMatchDatabaseDefault; } public Map<String, Conflict> getConflictSettingsByChannel() { return conflictSettingsByChannel; } public void setConflictSettingsByChannel(Map<String, Conflict> conflictSettingsByChannel) { this.conflictSettingsByChannel = conflictSettingsByChannel; } public Map<String, Conflict> getConflictSettingsByTable() { return conflictSettingsByTable; } public void setConflictSettingsByTable(Map<String, Conflict> conflictSettingsByTable) { this.conflictSettingsByTable = conflictSettingsByTable; } public List<IDatabaseWriterFilter> getDatabaseWriterFilters() { return databaseWriterFilters; } public void setDatabaseWriterFilters(List<IDatabaseWriterFilter> databaseWriterFilters) { this.databaseWriterFilters = databaseWriterFilters; } public void setResolvedData(ResolvedData... resolvedData) { this.resolvedData = new ArrayList<ResolvedData>(); if (resolvedData != null) { for (ResolvedData data : resolvedData) { this.resolvedData.add(data); } } } public void setResolvedData(List<ResolvedData> resolvedData) { this.resolvedData = resolvedData; } public List<ResolvedData> getResolvedData() { return resolvedData; } public void setDatabaseWriterErrorHandlers( List<IDatabaseWriterErrorHandler> databaseWriterErrorHandlers) { this.databaseWriterErrorHandlers = databaseWriterErrorHandlers; } public List<IDatabaseWriterErrorHandler> getDatabaseWriterErrorHandlers() { return databaseWriterErrorHandlers; } public ResolvedData getResolvedData (long rowNumber) { if (resolvedData != null) { for (ResolvedData data : resolvedData) { if (data.getRowNumber() == rowNumber) { return data; } } } return null; } public void setIgnoreMissingTables(boolean ignoreMissingTables) { this.ignoreMissingTables = ignoreMissingTables; } public boolean isIgnoreMissingTables() { return ignoreMissingTables; } public void addErrorHandler(IDatabaseWriterErrorHandler handler) { if (this.databaseWriterErrorHandlers == null) { this.databaseWriterErrorHandlers = new ArrayList<IDatabaseWriterErrorHandler>(); } this.databaseWriterErrorHandlers.add(handler); } public Conflict pickConflict(Table table, Batch batch) { Conflict settings = null; String fullyQualifiedName = table.getFullyQualifiedTableName().toLowerCase(); if (conflictSettingsByTable != null) { Conflict found = conflictSettingsByTable.get(fullyQualifiedName); if (found == null) { found = conflictSettingsByTable.get(table.getName().toLowerCase()); } if (found != null && (StringUtils.isBlank(found.getTargetChannelId()) || found .getTargetChannelId().equals(batch.getChannelId()))) { settings = found; } } if (settings == null && conflictSettingsByChannel != null) { settings = conflictSettingsByChannel.get(batch.getChannelId()); } if (settings == null) { settings = defaultConflictSetting; } if (settings == null) { settings = new Conflict(); } return settings; } public long getCommitSleepInterval() { return commitSleepInterval; } public void setCommitSleepInterval(long commitSleepInterval) { this.commitSleepInterval = commitSleepInterval; } public boolean isSaveCurrentValueOnError() { return saveCurrentValueOnError; } public void setSaveCurrentValueOnError(boolean saveCurrentValueOnError) { this.saveCurrentValueOnError = saveCurrentValueOnError; } public void setFitToColumn(boolean fitToColumn) { this.fitToColumn = fitToColumn; } public boolean isFitToColumn() { return fitToColumn; } public void setTextColumnExpression(String textColumnExpression) { this.textColumnExpression = textColumnExpression; } public String getTextColumnExpression() { return textColumnExpression; } public void setApplyChangesOnly(boolean applyChangesOnly) { this.applyChangesOnly = applyChangesOnly; } public boolean isApplyChangesOnly() { return applyChangesOnly; } }