Java tutorial
/** * Copyright 2011-2012 eBusiness Information, Groupe Excilys (www.excilys.com) * * 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 com.excilys.ebi.spring.dbunit.config; import static org.springframework.util.StringUtils.tokenizeToStringArray; import java.io.IOException; import java.util.List; import org.dbunit.database.DatabaseConfig; import org.dbunit.dataset.CompositeDataSet; import org.dbunit.dataset.DataSetException; import org.dbunit.dataset.IDataSet; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.util.Assert; import com.excilys.ebi.spring.dbunit.config.Constants.ConfigurationDefaults; import com.excilys.ebi.spring.dbunit.dataset.DataSetDecorator; /** * @author <a href="mailto:slandelle@excilys.com">Stephane LANDELLE</a> */ public class DataSetConfiguration implements DatabaseConnectionConfigurer { private boolean disabled; private String dataSourceSpringName; private DBOperation setUpOperation[] = new DBOperation[] { ConfigurationDefaults.DEFAULT_SETUP_OPERATION }; private DBOperation tearDownOperation[] = new DBOperation[] { ConfigurationDefaults.DEFAULT_TEARDOWN_OPERATION }; private DBType dbType = ConfigurationDefaults.DEFAULT_DB_TYPE; private String[] dataSetResourceLocations = new String[] { "classpath:dataSet.xml" }; private DataSetFormat format = ConfigurationDefaults.DEFAULT_DB_FORMAT; private DataSetFormatOptions formatOptions = new DataSetFormatOptions(); private String escapePattern = ConfigurationDefaults.DEFAULT_ESCAPE_PATTERN; private int batchSize = ConfigurationDefaults.DEFAULT_BATCH_SIZE; private int fetchSize = ConfigurationDefaults.DEFAULT_FETCH_SIZE; private boolean qualifiedTableNames = ConfigurationDefaults.DEFAULT_QUALIFIED_TABLE_NAMES; private boolean batchedStatements = ConfigurationDefaults.DEFAULT_BATCHED_STATEMENTS; private boolean skipOracleRecycleBinTables = ConfigurationDefaults.DEFAULT_SKIP_ORACLE_RECYCLEBIN_TABLES; private String[] tableType = ConfigurationDefaults.DEFAULT_TABLE_TYPE; private String schema = ConfigurationDefaults.DEFAULT_SCHEMA; private Class<? extends DataSetDecorator>[] decorators = null; public IDataSet getDataSet() throws DataSetException, IOException { List<IDataSet> dataSets = format.loadMultiple(formatOptions, dataSetResourceLocations); return dataSets.size() == 1 ? dataSets.get(0) : new CompositeDataSet(dataSets.toArray(new IDataSet[dataSets.size()])); } @Override public void configure(DatabaseConfig databaseConfig) { Assert.notNull(dbType, "dbType is required"); databaseConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, dbType.getDataTypeFactory()); databaseConfig.setProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER, dbType.getMetadataHandler()); databaseConfig.setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN, escapePattern); databaseConfig.setProperty(DatabaseConfig.PROPERTY_BATCH_SIZE, batchSize); databaseConfig.setProperty(DatabaseConfig.PROPERTY_FETCH_SIZE, fetchSize); databaseConfig.setProperty(DatabaseConfig.FEATURE_CASE_SENSITIVE_TABLE_NAMES, formatOptions.isCaseSensitiveTableNames()); databaseConfig.setProperty(DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, qualifiedTableNames); databaseConfig.setProperty(DatabaseConfig.FEATURE_BATCHED_STATEMENTS, batchedStatements); databaseConfig.setProperty(DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES, skipOracleRecycleBinTables); databaseConfig.setProperty(DatabaseConfig.PROPERTY_TABLE_TYPE, tableType); } public static Builder newDataSetConfiguration() { return new Builder(); } public static class Builder { private DataSetConfiguration dataSetConfiguration = new DataSetConfiguration(); private Builder() { } public Builder withDisabled(boolean disabled) { dataSetConfiguration.disabled = disabled; return this; } public Builder withDataSourceSpringName(String dataSourceSpringName) { dataSetConfiguration.dataSourceSpringName = dataSourceSpringName; return this; } public Builder withSetUpOp(DBOperation[] setUpOp) { dataSetConfiguration.setUpOperation = setUpOp; return this; } public Builder withTearDownOp(DBOperation[] tearDownOp) { dataSetConfiguration.tearDownOperation = tearDownOp; return this; } public Builder withDbType(DBType dbType) { if (dbType != null) dataSetConfiguration.dbType = dbType; return this; } public Builder withDataSetResourceLocations(String[] dataSetResourceLocations) { dataSetConfiguration.dataSetResourceLocations = dataSetResourceLocations; return this; } public Builder withFormat(DataSetFormat format) { dataSetConfiguration.format = format; return this; } public Builder withFormatOptions(DataSetFormatOptions formatOptions) { dataSetConfiguration.formatOptions = formatOptions; return this; } public Builder withEscapePattern(String escapePattern) { escapePattern = escapePattern.trim(); dataSetConfiguration.escapePattern = escapePattern.isEmpty() ? null : escapePattern; return this; } public Builder withBatchSize(int batchSize) { dataSetConfiguration.batchSize = batchSize; return this; } public Builder withFetchSize(int fetchSize) { dataSetConfiguration.fetchSize = fetchSize; return this; } public Builder withQualifiedTableNames(boolean qualifiedTableNames) { dataSetConfiguration.qualifiedTableNames = qualifiedTableNames; return this; } public Builder withBatchedStatements(boolean batchedStatements) { dataSetConfiguration.batchedStatements = batchedStatements; return this; } public Builder withSkipOracleRecycleBinTables(boolean skipOracleRecycleBinTables) { dataSetConfiguration.skipOracleRecycleBinTables = skipOracleRecycleBinTables; return this; } public Builder withTableType(String[] tableType) { if (tableType != null) dataSetConfiguration.tableType = tableType; return this; } public Builder withSchema(String schema) { schema = schema.trim(); if (!schema.isEmpty()) dataSetConfiguration.schema = schema; return this; } public Builder withDecorators(Class<? extends DataSetDecorator>[] decorators) { if (decorators != null) dataSetConfiguration.decorators = decorators; return this; } public DataSetConfiguration build() { Assert.notNull(dataSetConfiguration.dataSetResourceLocations, "dataSetResourceLocations is required"); Assert.notNull(dataSetConfiguration.setUpOperation, "setUpOperation is required"); Assert.notNull(dataSetConfiguration.tearDownOperation, "tearDownOperation is required"); Assert.notNull(dataSetConfiguration.dbType, "dbType is required"); Assert.notNull(dataSetConfiguration.format, "format is required"); Assert.notNull(dataSetConfiguration.formatOptions, "formatOptions are required"); return dataSetConfiguration; } } public String getDataSetResourceLocation() { throw new UnsupportedOperationException(); } public void setDataSetResourceLocation(String dataSetResourceLocation) { this.dataSetResourceLocations = tokenizeToStringArray(dataSetResourceLocation, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS); } public boolean isDisabled() { return disabled; } public String getDataSourceSpringName() { return dataSourceSpringName; } public DBOperation[] getSetUpOperation() { return setUpOperation; } public DBOperation[] getTearDownOperation() { return tearDownOperation; } public DBType getDbType() { return dbType; } public String[] getDataSetResourceLocations() { return dataSetResourceLocations; } public DataSetFormat getFormat() { return format; } public DataSetFormatOptions getFormatOptions() { return formatOptions; } public String getEscapePattern() { return escapePattern; } public int getBatchSize() { return batchSize; } public int getFetchSize() { return fetchSize; } public boolean isQualifiedTableNames() { return qualifiedTableNames; } public boolean isBatchedStatements() { return batchedStatements; } public boolean isSkipOracleRecycleBinTables() { return skipOracleRecycleBinTables; } public void setDisabled(boolean disabled) { this.disabled = disabled; } public void setDataSourceSpringName(String dataSourceSpringName) { this.dataSourceSpringName = dataSourceSpringName; } public void setSetUpOperation(DBOperation[] setUpOperation) { this.setUpOperation = setUpOperation; } public void setTearDownOperation(DBOperation[] tearDownOperation) { this.tearDownOperation = tearDownOperation; } public void setDbType(DBType dbType) { this.dbType = dbType; } public void setDataSetResourceLocations(String[] dataSetResourceLocations) { this.dataSetResourceLocations = dataSetResourceLocations; } public void setFormat(DataSetFormat format) { this.format = format; } public void setFormatOptions(DataSetFormatOptions formatOptions) { this.formatOptions = formatOptions; } public void setEscapePattern(String escapePattern) { this.escapePattern = escapePattern; } public void setBatchSize(int batchSize) { this.batchSize = batchSize; } public void setFetchSize(int fetchSize) { this.fetchSize = fetchSize; } public void setQualifiedTableNames(boolean qualifiedTableNames) { this.qualifiedTableNames = qualifiedTableNames; } public void setBatchedStatements(boolean batchedStatements) { this.batchedStatements = batchedStatements; } public void setSkipOracleRecycleBinTables(boolean skipOracleRecycleBinTables) { this.skipOracleRecycleBinTables = skipOracleRecycleBinTables; } public String[] getTableType() { return tableType; } public void setTableType(String[] tableType) { this.tableType = tableType; } public String getSchema() { return schema; } public void setSchema(String schema) { this.schema = schema; } public Class<? extends DataSetDecorator>[] getDecorators() { return decorators; } public void setDecorators(Class<? extends DataSetDecorator>[] decorators) { this.decorators = decorators; } }