Project

General

Profile

Download (23.3 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.v40_41;
11

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

    
15
import org.apache.log4j.Logger;
16

    
17
import eu.etaxonomy.cdm.common.UTF8;
18
import eu.etaxonomy.cdm.database.DatabaseTypeEnum;
19
import eu.etaxonomy.cdm.database.update.ColumnAdder;
20
import eu.etaxonomy.cdm.database.update.ColumnRemover;
21
import eu.etaxonomy.cdm.database.update.ISchemaUpdater;
22
import eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep;
23
import eu.etaxonomy.cdm.database.update.IndexAdder;
24
import eu.etaxonomy.cdm.database.update.LanguageStringTableCreator;
25
import eu.etaxonomy.cdm.database.update.SchemaUpdaterBase;
26
import eu.etaxonomy.cdm.database.update.SimpleSchemaUpdaterStep;
27
import eu.etaxonomy.cdm.database.update.SortIndexUpdater;
28
import eu.etaxonomy.cdm.database.update.TableDroper;
29
import eu.etaxonomy.cdm.database.update.v36_40.SchemaUpdater_36_40;
30

    
31
/**
32
 * @author a.mueller
33
 * @created 16.04.2016
34
 */
35
public class SchemaUpdater_40_41 extends SchemaUpdaterBase {
36

    
37
	@SuppressWarnings("unused")
38
	private static final Logger logger = Logger.getLogger(SchemaUpdater_40_41.class);
39
	private static final String endSchemaVersion = "4.1.0.0.201607300000";
40
	private static final String startSchemaVersion = "4.0.0.0.201604200000";
41

    
42
	// ********************** FACTORY METHOD *************************************
43

    
44
	public static SchemaUpdater_40_41 NewInstance() {
45
		return new SchemaUpdater_40_41();
46
	}
47

    
48
	/**
49
	 * @param startSchemaVersion
50
	 * @param endSchemaVersion
51
	 */
52
	protected SchemaUpdater_40_41() {
53
		super(startSchemaVersion, endSchemaVersion);
54
	}
55

    
56
	@Override
57
	protected List<ISchemaUpdaterStep> getUpdaterList() {
58

    
59
		String stepName;
60
		String tableName;
61
		ISchemaUpdaterStep step;
62
		String query;
63
		String newColumnName;
64
		String oldColumnName;
65

    
66
		List<ISchemaUpdaterStep> stepList = new ArrayList<ISchemaUpdaterStep>();
67

    
68

    
69
        //#3658 update nomenclatural code
70
        NomenclaturalCodeUpdater.NewInstance(stepList);
71

    
72
        //#5970
73
        //Implement allowOverride in CdmPreference
74
        stepName = "Add allowOverride in CdmPreference";
75
        tableName = "CdmPreference";
76
        newColumnName = "allowOverride";
77
        step = ColumnAdder.NewBooleanInstance(stepName, tableName, newColumnName, ! INCLUDE_AUDIT, false);
78
        stepList.add(step);
79

    
80
        //#5875
81
        //Implement isDefault to DescriptionBase
82
        stepName = "Add isDefault in DescriptionBase";
83
        tableName = "DescriptionBase";
84
        newColumnName = "isDefault";
85
        step = ColumnAdder.NewBooleanInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, false);
86
        stepList.add(step);
87

    
88
        //#5826
89
        //Cleanup empty name descriptions
90
        stepName = "Cleanup empty name descriptions";
91
//        query = " DELETE FROM @@DescriptionBase@@ db " +
92
//                 " WHERE db.DTYPE = 'TaxonNameDescription' " +
93
//                 " AND NOT EXISTS (SELECT * FROM @@DescriptionElementBase@@ deb WHERE deb.indescription_id = db.id )";
94
        query = "DELETE FROM @@DescriptionBase@@ "
95
                + " WHERE DTYPE = 'TaxonNameDescription' AND id IN (SELECT id FROM " +
96
                  " (SELECT id FROM DescriptionBase db "
97
                  + "   WHERE NOT EXISTS (SELECT * FROM DescriptionElementBase deb WHERE deb.indescription_id = db.id )"
98
                  + "   AND NOT EXISTS (SELECT * FROM DescriptionBase_Annotation MN WHERE MN.descriptionbase_id = db.id) "
99
                  + "   AND NOT EXISTS (SELECT * FROM DescriptionBase_Credit MN WHERE MN.descriptionbase_id = db.id) "
100
                  + "   AND NOT EXISTS (SELECT * FROM DescriptionBase_Extension MN WHERE MN.descriptionbase_id = db.id) "
101
                  + "   AND NOT EXISTS (SELECT * FROM DescriptionBase_Identifier MN WHERE MN.descriptionbase_id = db.id) "
102
                  + "   AND NOT EXISTS (SELECT * FROM DescriptionBase_Marker MN WHERE MN.descriptionbase_id = db.id) "
103
                  + "   AND NOT EXISTS (SELECT * FROM DescriptionBase_OriginalSourceBase MN WHERE MN.descriptionbase_id = db.id) "
104
                  + "   AND NOT EXISTS (SELECT * FROM DescriptionBase_Reference MN WHERE MN.descriptionbase_id = db.id) "
105
                  + "   AND NOT EXISTS (SELECT * FROM DescriptionBase_RightsInfo MN WHERE MN.descriptionbase_id = db.id) "
106
                  + "   AND NOT EXISTS (SELECT * FROM WorkingSet_DescriptionBase MN WHERE MN.descriptions_id = db.id) "
107
                  + " ) as drvTbl) ";
108
        SimpleSchemaUpdaterStep simpleStep = SimpleSchemaUpdaterStep.NewNonAuditedInstance(stepName, query, -99);
109
        stepList.add(simpleStep);
110

    
111
        //#5921
112
        //UPDATE congruent symbol in DefinedTermBase
113
        stepName = "UPDATE congruent symbol in DefinedTermBase";
114
        query = " UPDATE @@DefinedTermBase@@ "
115
                + " SET idInVocabulary = Replace(idInVocabulary, '\u2245', '\u225c'), symbol = Replace(symbol, '\u2245', '\u225c'), inverseSymbol = Replace(inverseSymbol, '\u2245', '\u225c')"
116
                + " WHERE DTYPE like 'TaxonRel%' "
117
                + "     AND (idInVocabulary like '%\u2245%' OR symbol like '%\u2245%' OR inverseSymbol like '%\u2245%' )";
118
        simpleStep = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, "DefinedTermBase", -99);
119
        stepList.add(simpleStep);
120

    
121
        //#5921
122
        //UPDATE congruent symbol in Representations
123
        stepName = "UPDATE congruent symbol in Representations";
124
        query = " UPDATE @@Representation@@ "
125
                + " SET abbreviatedLabel = Replace(abbreviatedLabel, '\u2245', '\u225c') "
126
                + " WHERE (abbreviatedLabel like '%\u2245%' )";
127
        simpleStep = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, "Representation", -99);
128
        stepList.add(simpleStep);
129

    
130

    
131
        //#5976
132
        //update sortindex on FeatureNode children
133
        stepName = "Update sort index on FeatureNode children";
134
        tableName = "FeatureNode";
135
        String parentIdColumn = "parent_id";
136
        String sortIndexColumn = "sortIndex";
137
        SortIndexUpdater updateSortIndex = SortIndexUpdater.NewUpdateExistingSortindexInstance(stepName, tableName, parentIdColumn, sortIndexColumn, INCLUDE_AUDIT);
138
        stepList.add(updateSortIndex);
139

    
140
        //#5976
141
        // update sortindex for TaxonNodes
142
        stepName = "Update sort index on TaxonNode children";
143
        tableName = "TaxonNode";
144
        parentIdColumn = "parent_id";
145
        sortIndexColumn = "sortIndex";
146
        updateSortIndex = SortIndexUpdater.NewUpdateExistingSortindexInstance(
147
                stepName, tableName, parentIdColumn, sortIndexColumn,
148
                INCLUDE_AUDIT);
149
        stepList.add(updateSortIndex);
150

    
151
        //#5976
152
        stepName = "Update sort index on PolytomousKeyNode children";
153
        tableName = "PolytomousKeyNode";
154
        parentIdColumn = "parent_id";
155
        sortIndexColumn = "sortIndex";
156
        updateSortIndex = SortIndexUpdater.NewUpdateExistingSortindexInstance(
157
                stepName, tableName, parentIdColumn, sortIndexColumn,
158
                INCLUDE_AUDIT);
159
        stepList.add(updateSortIndex);
160

    
161
        //#3925
162
        //excluded to TaxonNode
163
        stepName = "Add excluded to TaxonNode";
164
        tableName = "TaxonNode";
165
        newColumnName = "excluded";
166
        step = ColumnAdder.NewBooleanInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, false);
167
        stepList.add(step);
168

    
169
        //#3925
170
        //Move excluded from Taxon to TaxonNode
171
        stepName = "Move excluded from Taxon to TaxonNode";
172
        query = "UPDATE @@TaxonNode@@ tn " +
173
                " SET excluded = (SELECT DISTINCT excluded FROM @@TaxonBase@@ tb WHERE tb.id = tn.taxon_id)";
174
        simpleStep = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, "TaxonNode", -99)
175
                //.addDefaultAuditing("TaxonBase") removed due to non unique results in subquery, solving this problem is too much work to be implemented here, so audited values will not be correct partly but always representing the current state
176
                ;
177
        stepList.add(simpleStep);
178

    
179
        stepName = "Move excluded from Taxon to TaxonNode/set null to false";
180
        query = "UPDATE @@TaxonNode@@ SET excluded = 0 WHERE excluded IS NULL";
181
        simpleStep = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, "TaxonNode", -99);
182
        simpleStep.put(DatabaseTypeEnum.PostgreSQL, query.replace("0", "false"));
183
        simpleStep.putAudited(DatabaseTypeEnum.PostgreSQL, query.replace("TaxonNode","TaxonNode_AUD").replace("0", "false"));
184
        stepList.add(simpleStep);
185

    
186
        //#3925
187
        //remove excluded from TaxonNode
188
        stepName = "Remove excluded from TaxonBase";
189
        tableName = "TaxonBase";
190
        oldColumnName = "excluded";
191
        step = ColumnRemover.NewInstance(stepName, tableName, oldColumnName, INCLUDE_AUDIT);
192
        stepList.add(step);
193

    
194
        //#3925
195
        //unplaced to TaxonNode
196
        stepName = "Add unplaced to TaxonNode";
197
        tableName = "TaxonNode";
198
        newColumnName = "unplaced";
199
        step = ColumnAdder.NewBooleanInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, false);
200
        stepList.add(step);
201

    
202

    
203
        //#3925
204
        //Move unplaced from Taxon to TaxonNode
205

    
206
        stepName = "Move unplaced from Taxon to TaxonNode";
207
        query = "UPDATE @@TaxonNode@@ tn " +
208
                " SET unplaced = (SELECT DISTINCT unplaced FROM @@TaxonBase@@ tb WHERE tb.id = tn.taxon_id)";
209
        simpleStep = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, "TaxonNode", -99)
210
                //.addDefaultAuditing("TaxonBase") removed due to non unique results in subquery, solving this problem is too much work to be implemented here, so audited values will not be correct partly but always representing the current state
211
                ;
212
        stepList.add(simpleStep);
213

    
214
        stepName = "Move unplaced from Taxon to TaxonNode/set null to false";
215
        query = "UPDATE @@TaxonNode@@ SET unplaced = 0 WHERE unplaced IS NULL";
216
        simpleStep = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, "TaxonNode", -99);
217
        simpleStep.put(DatabaseTypeEnum.PostgreSQL, query.replace("0", "false"));
218
        simpleStep.putAudited(DatabaseTypeEnum.PostgreSQL, query.replace("TaxonNode","TaxonNode_AUD").replace("0", "false"));
219
        stepList.add(simpleStep);
220

    
221
        //#3925
222
        //remove unplaced from TaxonNode
223
        stepName = "Remove unplaced from TaxonBase";
224
        tableName = "TaxonBase";
225
        oldColumnName = "unplaced";
226
        step = ColumnRemover.NewInstance(stepName, tableName, oldColumnName, INCLUDE_AUDIT);
227
        stepList.add(step);
228

    
229
        //#5778
230
        //update PresenceAbsenceTerm symbols
231
        updatePresenceAbsenceTermSymbols(stepList);
232

    
233
        //#6089
234
        //Remove taxonomicParentCache from Taxon
235
        stepName = "Remove taxonomicParentCache from Taxon";
236
        tableName = "TaxonBase";
237
        oldColumnName = "taxonomicParentCache_id";
238
        step = ColumnRemover.NewInstance(stepName, tableName, oldColumnName, INCLUDE_AUDIT);
239
        stepList.add(step);
240

    
241
        //#6089
242
        //Remove taxonomicChildrenCount from Taxon
243
        stepName = "Remove taxonomicChildrenCount from Taxon";
244
        tableName = "TaxonBase";
245
        oldColumnName = "taxonomicChildrenCount";
246
        step = ColumnRemover.NewInstance(stepName, tableName, oldColumnName, INCLUDE_AUDIT);
247
        stepList.add(step);
248

    
249
        //#5974 Remove synonym relationships
250
        removeSynonymRelationships_5974(stepList);
251

    
252

    
253
        //#5981 Add abbreviation to Rank "Cultivar"
254
        stepName = "Add abbreviation to Rank 'Cultivar'";
255
        String updateSql = "UPDATE Representation SET abbreviatedLabel='cv.' WHERE label='Cultivar'";
256
        String nonAuditedTableName = "Representation";
257
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, nonAuditedTableName, -99);
258
        stepList.add(step);
259

    
260
        //#5981  Add abbreviation to idInVoc for 'Cultivar'
261
        stepName = "#5981 Add abbreviation to idInVoc for 'Cultivar'";
262
        updateSql = "UPDATE DefinedTermBase SET idInVocabulary='cv.' WHERE uuid='5e98415b-dc6e-440b-95d6-ea33dbb39ad0'";
263
        nonAuditedTableName = "DefinedTermBase";
264
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, nonAuditedTableName, -99);
265
        stepList.add(step);
266

    
267
        //#5952 Add identityCache
268
        stepName = "Add identityCache";
269
        tableName = "SpecimenOrObservationBase";
270
        newColumnName = "identityCache";
271
        step = ColumnAdder.NewStringInstance (stepName, tableName, newColumnName, INCLUDE_AUDIT);
272
        stepList.add(step);
273

    
274
        //index
275
        stepName = "Add identityCache index";
276
        tableName = "SpecimenOrObservationBase";
277
        newColumnName = "identityCache";
278
        step = IndexAdder.NewInstance(stepName, tableName, newColumnName, null);
279
        stepList.add(step);
280

    
281
        stepName = "Add protectedIdentityCache";
282
        tableName = "SpecimenOrObservationBase";
283
        newColumnName = "protectedIdentityCache";
284
        step = ColumnAdder.NewBooleanInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, false);
285
        stepList.add(step);
286

    
287
        //#5634 Add excluded note
288
        stepName = "Add excluded note";
289
        tableName = "TaxonNode";
290
        String attributeName = "excludedNote";
291
        step = LanguageStringTableCreator.NewLanguageStringInstance(stepName, tableName, attributeName, INCLUDE_AUDIT);
292
        stepList.add(step);
293

    
294
        return stepList;
295
    }
296

    
297
	private void removeSynonymRelationships_5974(List<ISchemaUpdaterStep> stepList) {
298
	    //add partial column to Synonym
299
        String stepName = "Add partial column to Synonym";
300
        String tableName = "TaxonBase";
301
        String newColumnName = "partial";
302
        ISchemaUpdaterStep step = ColumnAdder.NewBooleanInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, false);
303
        stepList.add(step);
304

    
305
	    //add proParte column to Synonym
306
        stepName = "Add proParte column to Synonym";
307
        tableName = "TaxonBase";
308
        newColumnName = "proParte";
309
        step = ColumnAdder.NewBooleanInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, false);
310
        stepList.add(step);
311

    
312
	    //add type column to Synonym
313
        stepName = "Add type column to Synonym";
314
        tableName = "TaxonBase";
315
        newColumnName = "type_id";
316
        String referencedTable = "DefinedTermBase";
317
        step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, !NOT_NULL, referencedTable);
318
        stepList.add(step);
319

    
320
	    //add acceptedTaxon_id to Synonym
321
        stepName = "Add acceptedTaxon to Synonym";
322
        tableName = "TaxonBase";
323
        newColumnName = "acceptedTaxon_id";
324
        referencedTable = "TaxonBase";
325
        step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, !NOT_NULL, referencedTable);
326
        stepList.add(step);
327

    
328
	    //move data
329
        //move duplicates first
330
	    step = SynonymDeduplicator.NewInstance();
331
        stepList.add(step);
332

    
333
        //update pro parte
334
        stepName = "Update proParte";
335
        String updateSql = "UPDATE @@TaxonBase@@ syn " +
336
                " SET proParte = (SELECT DISTINCT proParte FROM @@SynonymRelationship@@ sr WHERE sr.relatedFrom_id = syn.id) " +
337
                " WHERE acceptedTaxon_id IS NULL ";
338
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, "TaxonBase", -99)
339
                //.addDefaultAuditing("SynonymRelationship")  //difficult to implement due to non-uniqueness in subquery
340
                ;
341
        stepList.add(step);
342

    
343
        updateSql = "UPDATE @@TaxonBase@@ " +
344
                " SET proParte = @FALSE@ " +
345
                " WHERE DTYPE='Synonym' AND proParte IS NULL ";
346
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, "TaxonBase", -99);
347
        stepList.add(step);
348

    
349

    
350
        //update partial
351
        stepName = "Update partial";
352
        updateSql = "UPDATE @@TaxonBase@@ syn " +
353
                " SET partial=(SELECT DISTINCT partial FROM @@SynonymRelationship@@ sr WHERE sr.relatedFrom_id = syn.id) " +
354
                " WHERE acceptedTaxon_id IS NULL ";
355
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, "TaxonBase", -99)
356
                //.addDefaultAuditing("SynonymRelationship")  //difficult to implement due to non-uniqueness in subquery
357
                ;
358
        stepList.add(step);
359

    
360
        updateSql = "UPDATE @@TaxonBase@@ " +
361
                " SET partial = @FALSE@ " +
362
                " WHERE DTYPE='Synonym' AND partial IS NULL ";
363
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, "TaxonBase", -99);
364
        stepList.add(step);
365

    
366
        //update synonym type
367
        stepName = "Update Synonym type";
368
        updateSql = "UPDATE @@TaxonBase@@ syn " +
369
                " SET type_id=(SELECT DISTINCT type_id FROM @@SynonymRelationship@@ sr WHERE sr.relatedFrom_id = syn.id)" +
370
                " WHERE acceptedTaxon_id IS NULL ";
371
        //        String updateSqlAud = updateSql.replace("TaxonBase", "TaxonBase_AUD").replace("SynonymRelationship", "SynonymRelationship_AUD");
372
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, "TaxonBase", -99);
373
        stepList.add(step);
374

    
375
        //update acceptedTaxon_id
376
        stepName = "Update acceptedTaxon_id";
377
        updateSql = "UPDATE @@TaxonBase@@ syn " +
378
                " SET acceptedTaxon_id=(SELECT DISTINCT relatedTo_id FROM @@SynonymRelationship@@ sr WHERE sr.relatedFrom_id = syn.id)" +
379
                " WHERE acceptedTaxon_id IS NULL ";
380
//        updateSqlAud = updateSql.replace("TaxonBase", "TaxonBase_AUD").replace("SynonymRelationship", "SynonymRelationship_AUD");
381
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, "TaxonBase", -99);
382
        stepList.add(step);
383

    
384

    
385

    
386
	    //rename SynonymRelationshipType to SynonymType in DefinedTermBase.DTYPE
387
        stepName = "Rename SynonymRelationshipType to SynonymType in DefinedTermBase.DTYPE";
388
        updateSql = "UPDATE DefinedTermBase SET DTYPE='SynonymType' WHERE DTYPE='SynonymRelationshipType'";
389
        String nonAuditedTableName = "DefinedTermBase";
390
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, nonAuditedTableName, -99);
391
        stepList.add(step);
392

    
393
        //rename SynonymRelationshipType to SynonymType in DefinedTermBase.titleCache
394
        stepName = "Rename SynonymRelationshipType to SynonymType in DefinedTermBase.titleCache";
395
        updateSql = "UPDATE DefinedTermBase SET titleCache='SynonymType' WHERE titleCache='SynonymRelationshipType'";
396
        nonAuditedTableName = "DefinedTermBase";
397
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, nonAuditedTableName, -99);
398
        stepList.add(step);
399

    
400
        //rename SynonymRelationshipType to SynonymType in Representation labels
401
        stepName = "Rename SynonymRelationshipType to SynonymType in Representation labels";
402
        updateSql = "UPDATE Representation SET label='Synonym Type' WHERE label='Synonym Relationship Type'";
403
        nonAuditedTableName = "Representation";
404
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, nonAuditedTableName, -99);
405
        stepList.add(step);
406

    
407
        //rename SynonymRelationshipType to SynonymType in Representation text
408
        stepName = "Rename SynonymRelationshipType to SynonymType in Representation text";
409
        updateSql = "UPDATE Representation SET text='Synonym Type' WHERE text='Synonym Relationship Type'";
410
        nonAuditedTableName = "Representation";
411
        step = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, updateSql, nonAuditedTableName, -99);
412
        stepList.add(step);
413

    
414
	    //remove SynonymRelationship_Annotation
415
        stepName = "Remove SynonymRelationship_Annotation table";
416
        tableName = "SynonymRelationship_Annotation";
417
        step = TableDroper.NewInstance(stepName, tableName, INCLUDE_AUDIT);
418
        stepList.add(step);
419

    
420
        //remove SynonymRelationship_Marker
421
        stepName = "Remove SynonymRelationship_Marker table";
422
        tableName = "SynonymRelationship_Marker";
423
        step = TableDroper.NewInstance(stepName, tableName, INCLUDE_AUDIT);
424
        stepList.add(step);
425

    
426
        //remove SynonymRelationship table
427
        stepName = "Remove synonym relationship table";
428
        tableName = "SynonymRelationship";
429
        step = TableDroper.NewInstance(stepName, tableName, INCLUDE_AUDIT);
430
        stepList.add(step);
431
	}
432

    
433
    /**
434
     * @param stepList
435
     */
436
    private void updatePresenceAbsenceTermSymbols(List<ISchemaUpdaterStep> stepList) {
437
        String enDash = UTF8.EN_DASH.toString();
438

    
439
        //endemic
440
        updateSinglePATsymbol(stepList, "c3ee7048-15b7-4be1-b687-9ce9c1a669d6", "e", "" + UTF8.BLACK_CIRCLE);
441
        //present
442
        updateSinglePATsymbol(stepList, "cef81d25-501c-48d8-bbea-542ec50de2c2", "p", "");
443
        //doubtfully present
444
        updateSinglePATsymbol(stepList, "75a60279-a4c2-4f53-bc57-466028a4b3db", "pd", "?");
445
        //native
446
        updateSinglePATsymbol(stepList, "ddeac4f2-d8fa-43b8-ad7e-ca13abdd32c7", "n", "");
447
        //native: doubtfully native
448
        updateSinglePATsymbol(stepList, "310373bf-7df4-4d02-8cb3-bcc7448805fc", "nd", "d");
449
        //introduced: naturalized
450
        updateSinglePATsymbol(stepList, "e191e89a-a751-4b0c-b883-7f1de70915c9", "in", "n");
451
        //introduced: adventitious (casual)
452
        updateSinglePATsymbol(stepList, "42946bd6-9c22-45ad-a910-7427e8f60bfd", "ia", "a");
453
        //naturalised
454
        updateSinglePATsymbol(stepList, "4e04990a-66fe-4fdf-856c-f40772fbcf0a", "na", "n");
455
        //native: presence questionable
456
        updateSinglePATsymbol(stepList, "925662c1-bb10-459a-8c53-da5a738ac770", "nq", "?");
457
        //introduced: presence questionable
458
        updateSinglePATsymbol(stepList, "83eb0aa0-1a45-495a-a3ca-bf6958b74366", "iq", "?");
459
        //introduced: cultivated
460
        updateSinglePATsymbol(stepList, "fac8c347-8262-44a1-b0a4-db4de451c021", "ic", "c");
461
        //cultivated, presence questionable
462
        updateSinglePATsymbol(stepList, "4f31bfc8-3058-4d83-aea5-3a1fe9773f9f", "cq", "?c");
463
        //absent
464
        updateSinglePATsymbol(stepList, "59709861-f7d9-41f9-bb21-92559cedd598", "a", enDash);
465
        //reported in error
466
        updateSinglePATsymbol(stepList, "38604788-cf05-4607-b155-86db456f7680", "f", enDash);
467
        //native: reported in error
468
        updateSinglePATsymbol(stepList, "aeec2947-2700-4623-8e32-9e3a430569d1", "if", enDash);
469
        //cultivated: reported in error
470
        updateSinglePATsymbol(stepList, "9d4d3431-177a-4abe-8e4b-1558573169d6", "cf", enDash);
471

    
472
    }
473

    
474
    /**
475
     * @param uuid the uuid
476
     * @param oldSymbol
477
     * @param newSybol
478
     */
479
    private void updateSinglePATsymbol(List<ISchemaUpdaterStep> stepList,
480
            String uuid, String oldSymbol, String newSymbol) {
481
        String stepName = "Update single symbol for PresenceAbsenceTerm " + uuid;
482
        String query = "UPDATE @@DefinedTermBase@@ dtb "
483
                + " SET symbol = '" + newSymbol + "'"
484
                + " WHERE uuid = '" + uuid + "' AND symbol = '" + oldSymbol + "'" ;
485
        SimpleSchemaUpdaterStep simpleStep = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, "DefinedTermBase", -99);
486
        stepList.add(simpleStep);
487
    }
488

    
489
    @Override
490
	public ISchemaUpdater getNextUpdater() {
491
		return null;
492
	}
493

    
494
	@Override
495
	public ISchemaUpdater getPreviousUpdater() {
496
		return SchemaUpdater_36_40.NewInstance();
497
	}
498

    
499
}
(2-2/4)