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

org.unidal.dal.jdbc.test.DatabaseDumper Maven / Gradle / Ivy

The newest version!
package org.unidal.dal.jdbc.test;

import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.unidal.cat.Cat;
import org.unidal.dal.jdbc.DalException;
import org.unidal.dal.jdbc.raw.RawDao;
import org.unidal.dal.jdbc.raw.RawDataObject;
import org.unidal.dal.jdbc.test.data.entity.ColModel;
import org.unidal.dal.jdbc.test.data.entity.DatabaseModel;
import org.unidal.dal.jdbc.test.data.entity.RowModel;
import org.unidal.dal.jdbc.test.data.entity.TableModel;
import org.unidal.dal.jdbc.test.data.transform.BaseVisitor2;
import org.unidal.lookup.annotation.Inject;
import org.unidal.lookup.annotation.Named;

@Named
public class DatabaseDumper {
   @Inject
   private RawDao m_dao;

   public DatabaseModel dump(DatabaseModel base, String ds, String... tables) throws DalException {
      DatabaseModel model = new DatabaseModel();

      for (String table : tables) {
         List rowset = m_dao.executeQuery(ds, String.format("select * from `%s`", table));
         TableBuilder builder = new TableBuilder(table, rowset);

         model.accept(builder);
      }

      if (base != null) {
         base.accept(new DeltaRemoval(model, ds));
      }

      return model;
   }

   @SuppressWarnings("unused")
   class DeltaRemoval extends BaseVisitor2 {
      private DatabaseModel m_database;

      private TableModel m_table;

      private Set m_keys = new LinkedHashSet();

      private String m_ds;

      public DeltaRemoval(DatabaseModel database, String ds) {
         m_database = database;
         m_ds = ds;
      }

      @Override
      protected void visitRowChildren(RowModel row) {
         super.visitRowChildren(row);
      }

      @Override
      protected void visitTableChildren(TableModel table) {
         m_table = table;

         fetchIndexColumns(table.getName());

         super.visitTableChildren(table);
      }

      private void fetchIndexColumns(String table) {
         m_keys.clear();

         try {
            String sql = String.format("select COLUMN_NAME from INFORMATION_SCHEMA.INDEXES "
                  + "where TABLE_NAME='%s' and PRIMARY_KEY='true' order by PRIMARY_KEY", table.toUpperCase());

            List list = m_dao.executeQuery(m_ds, sql);

            for (RawDataObject item : list) {
               Object key = item.getFieldValue("COLUMN_NAME");

               m_keys.add(key.toString());
            }
         } catch (DalException e) {
            Cat.logError(e);
         }
      }
   }

   static class TableBuilder extends BaseVisitor2 {
      private String m_table;

      private List m_list;

      public TableBuilder(String table, List list) {
         m_table = table;
         m_list = list;
      }

      @Override
      protected void visitDatabaseChildren(DatabaseModel database) {
         TableModel table = new TableModel(m_table);

         database.addTable(table);
         super.visitDatabaseChildren(database);
      }

      @Override
      protected void visitTableChildren(TableModel table) {
         for (RawDataObject item : m_list) {
            RowModel row = new RowModel();

            for (Map.Entry e : item.getFields()) {
               String name = e.getKey();
               Object value = e.getValue();
               ColModel col = new ColModel().setName(name);

               if (value != null) {
                  col.setText(value.toString());
               }

               row.addCol(col);
            }

            table.addRow(row);
         }
      }
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy