Coverage Report - org.jtheque.primary.PrimaryUtilsSchema
 
Classes in this File Line Coverage Branch Coverage Complexity
PrimaryUtilsSchema
0 %
0/49
0 %
0/4
1.167
PrimaryUtilsSchema$1
N/A
N/A
1.167
PrimaryUtilsSchema$BorrowerRowMapper
0 %
0/7
N/A
1.167
 
 1  
 package org.jtheque.primary;
 2  
 
 3  
 /*
 4  
  * This file is part of JTheque.
 5  
  *
 6  
  * JTheque is free software: you can redistribute it and/or modify
 7  
  * it under the terms of the GNU General Public License as published by
 8  
  * the Free Software Foundation, either version 3 of the License.
 9  
  *
 10  
  * JTheque is distributed in the hope that it will be useful,
 11  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13  
  * GNU General Public License for more details.
 14  
  *
 15  
  * You should have received a copy of the GNU General Public License
 16  
  * along with JTheque.  If not, see <http://www.gnu.org/licenses/>.
 17  
  */
 18  
 
 19  
 import org.jtheque.core.managers.Managers;
 20  
 import org.jtheque.core.managers.beans.IBeansManager;
 21  
 import org.jtheque.core.managers.schema.AbstractSchema;
 22  
 import org.jtheque.core.managers.schema.HSQLImporter;
 23  
 import org.jtheque.core.managers.schema.Insert;
 24  
 import org.jtheque.primary.dao.able.IDaoCollections;
 25  
 import org.jtheque.primary.dao.able.IDaoLendings;
 26  
 import org.jtheque.primary.dao.able.IDaoPersons;
 27  
 import org.jtheque.primary.od.able.SimpleData.DataType;
 28  
 import org.jtheque.utils.bean.Version;
 29  
 import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
 30  
 import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
 31  
 
 32  
 import javax.annotation.Resource;
 33  
 import java.sql.ResultSet;
 34  
 import java.sql.SQLException;
 35  
 import java.util.List;
 36  
 
 37  
 /**
 38  
  * The database schema for the Movies Module.
 39  
  *
 40  
  * @author Baptiste Wicht
 41  
  */
 42  
 public final class PrimaryUtilsSchema extends AbstractSchema {
 43  
         @Resource
 44  
         private SimpleJdbcTemplate jdbcTemplate;
 45  
 
 46  0
         private static final String[] DEPENDENCIES = {};
 47  
 
 48  
         /**
 49  
          * Construct a new MoviesSchema.
 50  
          */
 51  
         public PrimaryUtilsSchema(){
 52  0
                 super();
 53  
 
 54  0
                 Managers.getManager(IBeansManager.class).inject(this);
 55  0
         }
 56  
 
 57  
         @Override
 58  
         public Version getVersion(){
 59  0
                 return new Version("1.1");
 60  
         }
 61  
 
 62  
         @Override
 63  
         public String getId(){
 64  0
                 return "PrimaryUtils-Schema";
 65  
         }
 66  
 
 67  
         @Override
 68  
         public String[] getDependencies(){
 69  0
                 return DEPENDENCIES;
 70  
         }
 71  
 
 72  
         @Override
 73  
         public void install(){
 74  0
                 createGeneralDataTables();
 75  0
                 createPrimaryDataTables();
 76  0
                 createReferentialIntegrityConstraints();
 77  0
         }
 78  
 
 79  
         @Override
 80  
         public void update(Version from){
 81  0
                 if ("1.0".equals(from.getVersion())){
 82  0
                         createReferentialIntegrityConstraints();
 83  0
                         createPrimaryDataTables();
 84  0
                         convertBorrowersToPersons();
 85  
                 }
 86  0
         }
 87  
 
 88  
         /**
 89  
          * Create the primary data tables of the schema.
 90  
          */
 91  
         private void createPrimaryDataTables(){
 92  0
                 jdbcTemplate.update("CREATE TABLE " + DataType.TYPE.getTable() + " (ID INT IDENTITY PRIMARY KEY, NAME VARCHAR(150) NOT NULL, IMPL VARCHAR(20) NOT NULL, CONSTRAINT UNIQUE_TYPE UNIQUE(NAME, IMPL))");
 93  0
                 jdbcTemplate.update("CREATE TABLE " + DataType.KIND.getTable() + " (ID INT IDENTITY PRIMARY KEY, NAME VARCHAR(150) NOT NULL, IMPL VARCHAR(20) NOT NULL, CONSTRAINT UNIQUE_KIND UNIQUE(NAME, IMPL))");
 94  0
                 jdbcTemplate.update("CREATE TABLE " + DataType.SAGA.getTable() + " (ID INT IDENTITY PRIMARY KEY, NAME VARCHAR(150) NOT NULL, IMPL VARCHAR(20) NOT NULL, CONSTRAINT UNIQUE_SAGA UNIQUE(NAME, IMPL))");
 95  0
                 jdbcTemplate.update("CREATE TABLE " + DataType.LANGUAGE.getTable() + " (ID INT IDENTITY PRIMARY KEY, DATE INT NOT NULL, THE_PERSON_FK INT NOT NULL, IMPL VARCHAR(20) NOT NULL)");
 96  0
                 jdbcTemplate.update("CREATE TABLE " + IDaoCollections.TABLE + " (ID INT IDENTITY PRIMARY KEY, TITLE VARCHAR(150) NOT NULL UNIQUE, PROTECTED BOOLEAN, PASSWORD VARCHAR(150), IMPL VARCHAR(20) NOT NULL)");
 97  
 
 98  0
                 jdbcTemplate.update("CREATE INDEX KINDS_IDX ON " + DataType.KIND.getTable() + "(ID)");
 99  0
                 jdbcTemplate.update("CREATE INDEX SAGAS_IDX ON " + DataType.SAGA.getTable() + "(ID)");
 100  0
                 jdbcTemplate.update("CREATE INDEX LENDINGS_IDX ON " + IDaoLendings.TABLE + "(ID)");
 101  0
                 jdbcTemplate.update("CREATE INDEX TYPES_IDX ON " + DataType.TYPE.getTable() + "(ID)");
 102  0
                 jdbcTemplate.update("CREATE INDEX COLLECTIONS_IDX ON " + IDaoCollections.TABLE + "(ID)");
 103  0
         }
 104  
 
 105  
         /**
 106  
          * Create the general data tables of the schema.
 107  
          */
 108  
         private void createGeneralDataTables(){
 109  0
                 jdbcTemplate.update("CREATE TABLE " + DataType.COUNTRY.getTable() + " (ID INT IDENTITY PRIMARY KEY, NAME VARCHAR(150) NOT NULL UNIQUE)");
 110  0
                 jdbcTemplate.update("CREATE TABLE " + DataType.LANGUAGE.getTable() + " (ID INT IDENTITY PRIMARY KEY, NAME VARCHAR(100) NOT NULL UNIQUE)");
 111  0
                 jdbcTemplate.update("CREATE TABLE " + IDaoPersons.TABLE + " (ID INT IDENTITY PRIMARY KEY, NAME VARCHAR(100) NOT NULL, FIRST_NAME VARCHAR(100) NOT NULL, EMAIL VARCHAR(100), NOTE INT, THE_COUNTRY_FK INT, TYPE VARCHAR(25), CONSTRAINT UNIQUE_PERSON UNIQUE(NAME, FIRST_NAME, TYPE))");
 112  
 
 113  0
                 jdbcTemplate.update("CREATE INDEX PERSONS_IDX ON " + IDaoPersons.TABLE + "(ID)");
 114  0
                 jdbcTemplate.update("CREATE INDEX LANGUAGES_IDX ON " + DataType.LANGUAGE.getTable() + "(ID)");
 115  0
                 jdbcTemplate.update("CREATE INDEX COUNTRIES_IDX ON " + DataType.COUNTRY.getTable() + "(ID)");
 116  0
         }
 117  
 
 118  
         /**
 119  
          * Create the constraints for referential integrity.
 120  
          */
 121  
         private void createReferentialIntegrityConstraints(){
 122  0
                 jdbcTemplate.update("ALTER TABLE " + IDaoPersons.TABLE + " ADD FOREIGN KEY (THE_COUNTRY_FK) REFERENCES  " + DataType.COUNTRY.getTable() + "  (ID) ON UPDATE SET NULL");
 123  0
                 jdbcTemplate.update("ALTER TABLE " + IDaoLendings.TABLE + " ADD FOREIGN KEY (THE_PERSON_FK) REFERENCES  " + IDaoPersons.TABLE + "  (ID) ON UPDATE SET NULL");
 124  0
         }
 125  
 
 126  
         /**
 127  
          * Convert the borrowers old db table to the new table Persons.
 128  
          */
 129  
         private void convertBorrowersToPersons(){
 130  0
                 List<Object[]> borrowers = jdbcTemplate.query("SELECT * FROM T_BORROWERS", new BorrowerRowMapper());
 131  
 
 132  0
                 String query = "INSERT INTO " + IDaoPersons.TABLE + "(NAME, FIRST_NAME, EMAIL, THE_COUNTRY_FK, TYPE) VALUES (?,?,?,?,?)";
 133  
 
 134  0
                 for (Object[] borrower : borrowers){
 135  0
                         jdbcTemplate.update(query, borrower[1], borrower[2], borrower[0], borrower[3], PrimaryConstants.BORROWER);
 136  
                 }
 137  
 
 138  0
                 jdbcTemplate.update("DROP TABLE IF EXISTS T_BORROWERS");
 139  0
         }
 140  
 
 141  
         /**
 142  
          * A simple row mapper for the old Borrowers db table.
 143  
          *
 144  
          * @author Baptiste Wicht
 145  
          */
 146  0
         private static final class BorrowerRowMapper implements ParameterizedRowMapper<Object[]> {
 147  
                 @Override
 148  
                 public Object[] mapRow(ResultSet rs, int i) throws SQLException{
 149  0
                         Object[] borrower = new Object[4];
 150  
 
 151  0
                         borrower[0] = rs.getString("EMAIL");
 152  0
                         borrower[1] = rs.getString("NAME");
 153  0
                         borrower[2] = rs.getString("FIRSTNAME");
 154  0
                         borrower[3] = rs.getInt("THE_COUNTRY_FK");
 155  
 
 156  0
                         return borrower;
 157  
                 }
 158  
         }
 159  
 
 160  
         @Override
 161  
         public void importDataFromHSQL(Iterable<Insert> inserts){
 162  0
                 HSQLImporter importer = new HSQLImporter();
 163  
 
 164  0
                 importer.match("OD_COUNTRY", "INSERT INTO " + DataType.COUNTRY.getTable() + " (ID, NAME) VALUES (?,?,?)", 0, 2);
 165  0
                 importer.match("OD_LANGUAGE", "INSERT INTO " + DataType.LANGUAGE.getTable() + " (ID, NAME) VALUES(?, ?)", 0, 2);
 166  0
                 importer.match("OD_BORROWER", "INSERT INTO " + IDaoPersons.TABLE + " (ID, NAME, FIRST_NAME, EMAIL, THE_COUNTRY_FK, TYPE) VALUES(?,?,?,?,?,?)", PrimaryConstants.BORROWER, 0, 3, 2, 4, 5);
 167  
 
 168  0
                 importer.importInserts(inserts);
 169  0
         }
 170  
 }