1 | |
package org.jtheque.primary; |
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
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 | |
|
39 | |
|
40 | |
|
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 | |
|
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 | |
|
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 | |
|
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 | |
|
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 | |
|
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 | |
|
143 | |
|
144 | |
|
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 | |
} |