083c3ffa8c189980e36d8763b8b9261b430fed30
[cdmlib.git] / cdmlib-persistence / src / test / java / eu / etaxonomy / cdm / database / TestingTermInitializer.java
1 package eu.etaxonomy.cdm.database;
2
3 import java.io.InputStreamReader;
4 import java.sql.SQLException;
5 import java.util.HashMap;
6 import java.util.UUID;
7
8 import javax.annotation.PostConstruct;
9 import javax.sql.DataSource;
10
11 import org.apache.log4j.Logger;
12 import org.dbunit.database.DatabaseConfig;
13 import org.dbunit.database.DatabaseConnection;
14 import org.dbunit.database.IDatabaseConnection;
15 import org.dbunit.dataset.IDataSet;
16 import org.dbunit.dataset.xml.FlatXmlDataSet;
17 import org.dbunit.operation.DatabaseOperation;
18 import org.springframework.beans.factory.annotation.Autowired;
19 import org.springframework.core.io.Resource;
20 import org.springframework.transaction.TransactionStatus;
21
22 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
23 import eu.etaxonomy.cdm.test.integration.HsqldbDataTypeFactory;
24
25 public class TestingTermInitializer extends PersistentTermInitializer {
26 private static final Logger logger = Logger.getLogger(TestingTermInitializer.class);
27
28 private DataSource dataSource;
29
30 private Resource termsDataSet;
31
32 private Resource termsDtd;
33
34 private UUID[] vocabularyUuids = {
35 UUID.fromString("45ac7043-7f5e-4f37-92f2-3874aaaef2de"), // Language.class
36 UUID.fromString("e72cbcb6-58f8-4201-9774-15d0c6abc128"), // Continent.class
37 UUID.fromString("006b1870-7347-4624-990f-e5ed78484a1a"), // WaterbodyOrCountry.class
38 UUID.fromString("ef0d1ce1-26e3-4e83-b47b-ca74eed40b1b"), // Rank.class
39 UUID.fromString("ab177bd7-d3c8-4e58-a388-226fff6ba3c2"), // TypeDesignationStatus.class
40 // UUID.fromString("ab60e738-4d09-4c24-a1b3-9466b01f9f55"), // NameTypeDesignationStatus.class
41 UUID.fromString("bb28cdca-2f8a-4f11-9c21-517e9ae87f1f"), // NomenclaturalStatusType.class
42 UUID.fromString("48917fde-d083-4659-b07d-413db843bd50"), // SynonymRelationshipType.class
43 UUID.fromString("fc4abe52-9c25-4cfa-a682-8615bf4bbf07"), // HybridRelationshipType.class
44 UUID.fromString("6878cb82-c1a4-4613-b012-7e73b413c8cd"), // NameRelationshipType.class
45 UUID.fromString("15db0cf7-7afc-4a86-a7d4-221c73b0c9ac"), // TaxonRelationshipType.class
46 UUID.fromString("19dffff7-e142-429c-a420-5d28e4ebe305"), // MarkerType.class
47 UUID.fromString("ca04609b-1ba0-4d31-9c2e-aa8eb2f4e62d"), // AnnotationType.class
48 UUID.fromString("e51d52d6-965b-4f7d-900f-4ba9c6f5dd33"), // NamedAreaType.class
49 UUID.fromString("49034253-27c8-4219-97e8-f8d987d3d122"), // NamedAreaLevel.class
50 // UUID.fromString("fa032b1a-1ad2-4fb0-a1d9-3016399a80fa"), // NomenclaturalCode.class
51 UUID.fromString("b187d555-f06f-4d65-9e53-da7c93f8eaa8"), // Feature.class
52 UUID.fromString("1fb40504-d1d7-44b0-9731-374fbe6cac77"), // NamedArea.class //TDWGArea
53 UUID.fromString("adbbbe15-c4d3-47b7-80a8-c7d104e53a05"), // PresenceTerm.class
54 UUID.fromString("5cd438c8-a8a1-4958-842e-169e83e2ceee"), // AbsenceTerm.class
55 UUID.fromString("9718b7dd-8bc0-4cad-be57-3c54d4d432fe"), // Sex.class
56 UUID.fromString("398b50bb-348e-4fe0-a7f5-a75afd846d1f"), // DerivationEventType.class
57 UUID.fromString("a7dc20c9-e6b3-459e-8f05-8d6d8fceb465"), // PreservationMethod.class
58 UUID.fromString("fe87ea8d-6e0a-4e5d-b0da-0ab8ea67ca77"), // DeterminationModifier.class
59 UUID.fromString("066cc62e-7213-495e-a020-97a1233bc037"), // StatisticalMeasure.class
60 UUID.fromString("8627c526-73af-44d9-902c-11c1f11b60b4") //RightsTerm.class
61 };
62
63 public void setTermsDataSet(Resource termsDataSet) {
64 this.termsDataSet = termsDataSet;
65 }
66
67 public void setTermsDtd(Resource termsDtd) {
68 this.termsDtd = termsDtd;
69 }
70
71 @Autowired
72 public void setDataSource(DataSource dataSource) {
73 this.dataSource = dataSource;
74 }
75
76 @Override
77 @PostConstruct
78 public void initialize(){
79 TransactionStatus txStatus = transactionManager.getTransaction(txDefinition);
80 IDatabaseConnection connection = null;
81
82 try {
83 connection = getConnection();
84 IDataSet dataSet = new FlatXmlDataSet(new InputStreamReader(termsDataSet.getInputStream()),new InputStreamReader(termsDtd.getInputStream()));
85 DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
86 } catch (Exception e) {
87 logger.error(e);
88 for(StackTraceElement ste : e.getStackTrace()) {
89 logger.error(ste);
90 }
91 } finally {
92 try {
93 connection.close();
94 } catch (SQLException sqle) {
95 logger.error(sqle);
96 }
97 }
98 transactionManager.commit(txStatus);
99
100 for(int i = 0; i < vocabularyUuids.length; i++) {
101 Class<? extends DefinedTermBase> clazz = classesToInitialize[i];
102 UUID vocabularyUuid = vocabularyUuids[i];
103 secondPass(clazz, vocabularyUuid,new HashMap<UUID,DefinedTermBase>());
104 }
105 }
106
107 protected IDatabaseConnection getConnection() throws SQLException {
108 IDatabaseConnection connection = null;
109 try {
110 connection = new DatabaseConnection(dataSource.getConnection());
111
112 DatabaseConfig config = connection.getConfig();
113 config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,new HsqldbDataTypeFactory());
114 } catch (Exception e) {
115 logger.error(e);
116 }
117 return connection;
118 }
119 }