Project

General

Profile

Download (12.1 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy 
4
 * http://www.e-taxonomy.eu
5
 * 
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9

    
10
package eu.etaxonomy.cdm.database.update.v33_34;
11

    
12
import java.util.ArrayList;
13
import java.util.List;
14

    
15
import org.apache.log4j.Logger;
16

    
17
import eu.etaxonomy.cdm.database.update.ColumnAdder;
18
import eu.etaxonomy.cdm.database.update.ColumnRemover;
19
import eu.etaxonomy.cdm.database.update.ISchemaUpdater;
20
import eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep;
21
import eu.etaxonomy.cdm.database.update.SchemaUpdaterBase;
22
import eu.etaxonomy.cdm.database.update.SimpleSchemaUpdaterStep;
23
import eu.etaxonomy.cdm.database.update.TableCreator;
24
import eu.etaxonomy.cdm.database.update.TableDroper;
25
import eu.etaxonomy.cdm.database.update.v34_35.SchemaUpdater_341_35;
26

    
27
/**
28
 * @author a.mueller
29
 * @since Jan 14, 2014
30
 */
31
public class SchemaUpdater_34_341 extends SchemaUpdaterBase {
32

    
33
	@SuppressWarnings("unused")
34
	private static final Logger logger = Logger.getLogger(SchemaUpdater_34_341.class);
35
	private static final String endSchemaVersion = "3.4.1.0.201411210000";
36
	private static final String startSchemaVersion = "3.4.0.0.201407010000";
37

    
38
	// ********************** FACTORY METHOD *************************************
39

    
40
	public static SchemaUpdater_34_341 NewInstance() {
41
		return new SchemaUpdater_34_341();
42
	}
43

    
44
	/**
45
	 * @param startSchemaVersion
46
	 * @param endSchemaVersion
47
	 */
48
	protected SchemaUpdater_34_341() {
49
		super(startSchemaVersion, endSchemaVersion);
50
	}
51

    
52
	@Override
53
	protected List<ISchemaUpdaterStep> getUpdaterList() {
54

    
55
		String stepName;
56
		String tableName;
57
		ISchemaUpdaterStep step;
58
//		String columnName;
59
		String newColumnName;
60
		String oldColumnName;
61
		String query;
62

    
63
		List<ISchemaUpdaterStep> stepList = new ArrayList<ISchemaUpdaterStep>();
64
		
65
		//DnaMarker in Primer
66
		//TODO H2 / PostGreSQL / SQL Server
67
		stepName = "Add foreign key for Primer.dnaMarker";
68
		tableName = "Primer";
69
		newColumnName = "dnaMarker_id";
70
		boolean notNull = false;
71
		String referencedTable = "DefinedTermBase";
72
		step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, notNull, referencedTable);
73
		stepList.add(step);
74
		
75
		//Institution for DerivationEvent
76
		stepName = "Add foreign key for DerivationEvent.institution";
77
		tableName = "DerivationEvent";
78
		newColumnName = "institution_id";
79
		referencedTable = "AgentBase";
80
		step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, notNull, referencedTable);
81
		stepList.add(step);
82

    
83
		//Institution for Amplication
84
		stepName = "Add foreign key for Amplification.institution";
85
		tableName = "Amplification";
86
		newColumnName = "institution_id";
87
		referencedTable = "AgentBase";
88
		step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, notNull, referencedTable);
89
		stepList.add(step);
90
		
91
		//TaxonName for DeterminationEvent
92
		stepName = "Add foreign key for DeterminationEvent.taxonName";
93
		tableName = "DeterminationEvent";
94
		newColumnName = "taxonname_id";
95
		referencedTable = "TaxonNameBase";
96
		step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, notNull, referencedTable);
97
		stepList.add(step);
98
		
99
		//TaxonName for DeterminationEvent #3448, #4203, #4518
100
		stepName = "Add foreign key for DeterminationEvent.taxonName";
101
		tableName = "DnaQuality";
102
		newColumnName = "typedPurificationMethod_id";
103
		referencedTable = "MaterialOrMethodEvent";
104
		step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, notNull, referencedTable);
105
		stepList.add(step);
106
		
107
		
108
		//update DerivationEvent.taxonname_id #3448, #4203, #4518
109
		stepName = "Update taxon name in derivation event";
110
		query = "UPDATE DeterminationEvent " +
111
				" SET taxonname_id = (SELECT name_id FROM TaxonBase tb WHERE tb.id = taxon_id) " + 
112
				" WHERE taxon_id IS NOT NULL ";
113
		tableName = "DeterminationEvent";
114
		step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, "", -99);
115
		stepList.add(step);
116
 		
117
		mergePresenceAbsenceVocs(stepList);
118
	
119
		
120
		//SingleReadAlignment #4529
121
		stepName = "Remove Sequence_SingleRead";  //we assume that this field is not yet used
122
		tableName = "Sequence_SingleRead";
123
		step = TableDroper.NewInstance(stepName, tableName, INCLUDE_AUDIT, true);
124
 		stepList.add(step);
125
 		
126
 		//Add SingleReadAlignment #4529
127
 		stepName = "Add SingleReadAlignment";
128
 		tableName = "SingleReadAlignment";
129
 		String[] columnNames = new String[]{"shifts","editedsequence","reversecomplement",
130
 				"consensusalignment_id","singleread_id"};
131
 		String[] columnTypes = new String[]{"clob","clob","bit","int","int"};
132
 		String[] referencedTables = new String[]{null, null,null,"Sequence","SingleRead"};
133
 		step = TableCreator.NewInstance(stepName, tableName, columnNames, columnTypes, 
134
 				referencedTables, INCLUDE_AUDIT, true);
135
 		stepList.add(step);
136
 		
137
 		//Add labelCache to amplification #4542
138
 		stepName = "Add column 'labelCache'";
139
		tableName = "Amplification";
140
		newColumnName = "labelcache";
141
		step = ColumnAdder.NewStringInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT);
142
		stepList.add(step);
143
		
144
 		
145
 		//SPLIT Amplification and Amplification result
146
 		
147
 		// Amplification #4541
148
		stepName = "Create table 'AmplificationResult'";
149
		tableName = "AmplificationResult";
150
		step = TableCreator.NewAnnotatableInstance(stepName, tableName,
151
				new String[] { "successful", "successText", "dnaSample_id", "amplification_id",
152
						"cloning_id", "gelPhoto_id",
153
						}, // colNames
154
				new String[] {"bit", "string_255", "int", "int", "int", "int"}, // columnTypes
155
				new String[] { null, null, "SpecimenOrObservationBase", "Amplification", "MaterialOrMethodEvent",
156
						"DefinedTermBase", "Media" }, // referencedTables
157
				INCLUDE_AUDIT);
158
		stepList.add(step);
159
		
160
//		// amplification result - single reads #4541
161
//		stepName = "Add single reads to amplification result";
162
//		String firstTable = "AmplificationResult";
163
//		String secondTable = "SingleRead";
164
//		step = MnTableCreator
165
//				.NewMnInstance(stepName, firstTable, null, secondTable, null,
166
//						SchemaUpdaterBase.INCLUDE_AUDIT, false, true);
167
//		stepList.add(step);
168
		
169
		//Institution for Amplication
170
		stepName = "Add foreign key for SingleRead.amplificationresult";
171
		tableName = "SingleRead";
172
		newColumnName = "amplificationresult_id";
173
		referencedTable = "AmplificationResult";
174
		step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, notNull, referencedTable);
175
		stepList.add(step);
176

    
177

    
178
		//drop Amplification_SingleRead #4541
179
		stepName = "Drop Amplification_SingleRead";
180
		tableName = "Amplification_SingleRead";
181
		step = TableDroper.NewInstance(stepName, tableName, INCLUDE_AUDIT, true);
182
		stepList.add(step);
183
		
184
		//remove successful, successText, ...
185
		stepName = "Remove successful ... from Amplification";
186
 		tableName = "Amplification";
187
 		oldColumnName = "successful";
188
 		step = ColumnRemover.NewInstance(stepName, tableName, oldColumnName, INCLUDE_AUDIT);
189
 		stepList.add(step);
190
 		oldColumnName = "successText";
191
 		step = ColumnRemover.NewInstance(stepName, tableName, oldColumnName, INCLUDE_AUDIT);
192
 		stepList.add(step);
193
 		oldColumnName = "dnaSample_id";
194
 		step = ColumnRemover.NewInstance(stepName, tableName, oldColumnName, INCLUDE_AUDIT);
195
 		stepList.add(step);
196
 		oldColumnName = "cloning_id";
197
 		step = ColumnRemover.NewInstance(stepName, tableName, oldColumnName, INCLUDE_AUDIT);
198
 		stepList.add(step);
199
 		oldColumnName = "gelPhoto_id";
200
 		step = ColumnRemover.NewInstance(stepName, tableName, oldColumnName, INCLUDE_AUDIT);
201
 		stepList.add(step);
202
 		
203
 		stepName = "Remove amplification_id from SingleRead";
204
 		tableName = "SingleRead";
205
		oldColumnName = "amplification_id";
206
 		step = ColumnRemover.NewInstance(stepName, tableName, oldColumnName, INCLUDE_AUDIT);
207
 		stepList.add(step);
208
 
209
 	
210
 		
211
		//SpecimenOrObservationBase_Sequence (was incorrect mapping before)
212
		stepName = "Remove SpecimenOrObservationBase_Sequence";
213
		tableName = "SpecimenOrObservationBase_Sequence";
214
		step = TableDroper.NewInstance(stepName, tableName, true, true);
215
		stepList.add(step);
216
		
217
		return stepList;
218
		
219
	}
220

    
221
	private void mergePresenceAbsenceVocs(List<ISchemaUpdaterStep> stepList) {
222
		String stepName;
223
		String tableName;
224
		ISchemaUpdaterStep step;
225
		String newColumnName;
226
		String query;
227
		//PAT
228
		//ad absence term
229
		stepName = "Create absenceterm column";
230
		tableName = "DefinedTermBase";
231
		newColumnName = "absenceterm";
232
		step = ColumnAdder.NewBooleanInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, null);
233
		stepList.add(step);
234

    
235
 		//set default value
236
		stepName ="Update AbsenceTerm vocabulary";
237
		tableName = "DefinedTermBase";
238
		query = " UPDATE @@DefinedTermBase@@ " +
239
                " SET absenceterm = @@FALSE@@ " +
240
                " WHERE termType = 'PAT' ";
241
		step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, tableName, 99);
242
 		stepList.add(step);
243
		
244
 		//vocabulary for absence terms
245
		stepName ="Update AbsenceTerm vocabulary";
246
		tableName = "DefinedTermBase";
247
		query = " UPDATE @@DefinedTermBase@@ " +
248
                " SET absenceterm = @@TRUE@@, "
249
                	+ " vocabulary_id = "
250
                			+ "(SELECT id FROM @@TermVocabulary@@ " 
251
                			+ " WHERE uuid = 'adbbbe15-c4d3-47b7-80a8-c7d104e53a05'),"
252
                	  + " orderindex = orderindex + "
253
                	  		+ " (SELECT max(orderindex) FROM "
254
                	  		+ " (SELECT * FROM DefinedTermBase dtb2 "
255
                	  		+ " WHERE dtb2.termtype = 'PAT' AND dtb2.absenceterm = 0 "
256
                	  		+ ") as tmp )" +
257
                " WHERE DTYPE = 'AbsenceTerm' ";
258
		step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, tableName, 99);
259
 		stepList.add(step);
260
 
261
 		//PAT  - DTYPE
262
 		stepName ="Update PresenceAbsenceTerms DTYPE";
263
		tableName = "DefinedTermBase";
264
		query = " UPDATE @@DefinedTermBase@@ " +
265
                " SET DTYPE = 'PresenceAbsenceTerm' " +
266
                " WHERE termType = 'PAT' ";
267
		step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, tableName, 99);
268
 		stepList.add(step);
269
 		
270
 		//PAT  - remove absence vocabulary
271
 		stepName ="Remove Absence Vocabulary I";
272
		tableName = "TermVocabulary_Representation";
273
 		query = " DELETE FROM TermVocabulary_Representation " + 
274
				" WHERE TermVocabulary_id in (SELECT id FROM TermVocabulary WHERE uuid = '5cd438c8-a8a1-4958-842e-169e83e2ceee') ";
275
		step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, tableName, 99);
276
 		stepList.add(step);
277
 		
278
 		//PAT  - remove absence vocabulary
279
 		stepName ="Remove Absence Vocabulary II";
280
		tableName = "TermVocabulary_Representation";
281
 		query = " DELETE FROM TermVocabulary"
282
 				+ " WHERE uuid = '5cd438c8-a8a1-4958-842e-169e83e2ceee' ";
283
		step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, tableName, 99);
284
 		stepList.add(step);
285

    
286
 		//PAT  - remove absence vocabulary
287
 		stepName ="Remove Absence Vocabulary III";
288
		tableName = "Representation";
289
 		query = " DELETE FROM Representation "
290
 				+ " WHERE text = 'AbsenceTerm'  AND label = 'AbsenceTerm' ";
291
		step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, tableName, 99);
292
 		stepList.add(step);
293
 		
294
 		//PAT  - update representation
295
 		stepName ="Update Presence Absence vocabulary representation";
296
		tableName = "Representation";
297
 		query = " UPDATE Representation "
298
 				+ " SET text = 'Presence Absence Term', label = 'Presence Absence Term' "
299
 				+ " WHERE text = 'Presence Term'  AND label = 'Presence Term' ";
300
		step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, tableName, 99);
301
 		stepList.add(step);
302
 		
303
 		//PAT  - update titlecache
304
 		stepName ="Update Presence Absence vocabulary titlecache";
305
		tableName = "TermVocabulary";
306
 		query = " UPDATE TermVocabulary "
307
 				+ " SET titleCache = 'Presence Absence Term' "
308
 				+ " WHERE uuid = 'adbbbe15-c4d3-47b7-80a8-c7d104e53a05' ";
309
		step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, tableName, 99);
310
 		stepList.add(step);
311
	}
312

    
313

    
314

    
315
	@Override
316
	public ISchemaUpdater getNextUpdater() {
317
		return SchemaUpdater_341_35.NewInstance();
318
	}
319

    
320
	@Override
321
	public ISchemaUpdater getPreviousUpdater() {
322
		return SchemaUpdater_331_34.NewInstance();
323
	}
324

    
325
}
(2-2/3)