All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.tidalwave.util.test.DatabaseTestUtils Maven / Gradle / Ivy

The newest version!
/***********************************************************************************************************************
 *
 * blueBill Stats
 * Copyright (C) 2011-2011 by Tidalwave s.a.s. (http://www.tidalwave.it)
 *
 ***********************************************************************************************************************
 *
 * 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.
 *
 ***********************************************************************************************************************
 *
 * WWW: http://bluebill.tidalwave.it/mobile/
 * SCM: http://java.net/hg/bluebill-server~stats-src
 *
 **********************************************************************************************************************/
package it.tidalwave.util.test;

import javax.annotation.Nonnull;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.SQLException;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.dbunit.DatabaseUnitException;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.XmlDataSet;
import org.dbunit.dataset.xml.XmlDataSetWriter;
import org.dbunit.operation.DatabaseOperation;
import lombok.Cleanup;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import static lombok.AccessLevel.*;

/***********************************************************************************************************************
 *
 * @author  Fabrizio Giudici
 * @version $Id$
 *
 **********************************************************************************************************************/
@Slf4j @NoArgsConstructor(access=PRIVATE)
public final class DatabaseTestUtils // TODO: move class to TFT testutils
  {
    /*******************************************************************************************************************
     *
     * Delete all the contents of the database.
     * 
     * @param  transactionManager   the Spring transaction manager
     * 
     ******************************************************************************************************************/
    public static void delete (final @Nonnull JpaTransactionManager transactionManager) 
      throws SQLException, DatabaseUnitException
      {
        log.info("******** delete()");
        final @Cleanup IDatabaseConnection connection = createConnection(transactionManager);
        DatabaseOperation.DELETE_ALL.execute(connection, connection.createDataSet());
        connection.close();
      }
    
    /*******************************************************************************************************************
     *
     * Populates the database from the given XML file.
     * 
     * @param  transactionManager   the Spring transaction manager
     * @param  xmlFile              the file with the data to populate the database with
     * 
     ******************************************************************************************************************/
    public static void populate (final @Nonnull JpaTransactionManager transactionManager,
                                 final @Nonnull File xmlFile) 
      throws SQLException, DatabaseUnitException, IOException
      {
        log.info("******** populate(.., {})", xmlFile);
        final @Cleanup IDatabaseConnection connection = createConnection(transactionManager);
        final @Cleanup Reader r = new FileReader(xmlFile);
        DatabaseOperation.INSERT.execute(connection, new XmlDataSet(r));
        r.close();
        connection.close();
      }
    
    /*******************************************************************************************************************
     *
     * Dumps the database into the given XML file.
     * 
     * @param  transactionManager   the Spring transaction manager
     * @param  xmlFile              the file to create the dump into
     * 
     ******************************************************************************************************************/
    public static void dump (final @Nonnull JpaTransactionManager transactionManager,
                             final @Nonnull File xmlFile)
      throws SQLException, DatabaseUnitException, IOException
      {
        log.info("******** dump(.., {})", xmlFile);
        final @Cleanup IDatabaseConnection connection = createConnection(transactionManager);
        final IDataSet fullDataSet = connection.createDataSet();
        final Writer w1 = new FileWriter(xmlFile);
        final XmlDataSetWriter datasetWriter = new XmlDataSetWriter(w1, "UTF-8"); 
        datasetWriter.write(fullDataSet);
        w1.close();
        connection.close();
      }

    /*******************************************************************************************************************
     *
     ******************************************************************************************************************/
    @Nonnull
    private static IDatabaseConnection createConnection (final @Nonnull JpaTransactionManager transactionManager)
      throws DatabaseUnitException, SQLException 
      {
        final Connection jdbcConnection = transactionManager.getDataSource().getConnection();
        final IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
        return connection;
      }
  }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy