Project

General

Profile

Download (13.5 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.v41_47;
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.ColumnNameChanger;
19
import eu.etaxonomy.cdm.database.update.ISchemaUpdater;
20
import eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep;
21
import eu.etaxonomy.cdm.database.update.MnTableCreator;
22
import eu.etaxonomy.cdm.database.update.SchemaUpdaterBase;
23
import eu.etaxonomy.cdm.database.update.SimpleSchemaUpdaterStep;
24
import eu.etaxonomy.cdm.database.update.TableCreator;
25
import eu.etaxonomy.cdm.database.update.UniqueIndexDropper;
26
import eu.etaxonomy.cdm.database.update.v40_41.SchemaUpdater_40_41;
27

    
28
/**
29
 * @author a.mueller
30
 * @created 16.04.2016
31
 */
32
/**
33
 * @author a.mueller
34
 * @date 09.05.2017
35
 *
36
 */
37
public class SchemaUpdater_41_47 extends SchemaUpdaterBase {
38

    
39
	@SuppressWarnings("unused")
40
	private static final Logger logger = Logger.getLogger(SchemaUpdater_41_47.class);
41
	private static final String startSchemaVersion = "4.1.0.0.201607300000";
42
	private static final String endSchemaVersion = "4.7.0.0.201710040000";
43

    
44
	// ********************** FACTORY METHOD *************************************
45

    
46
	public static SchemaUpdater_41_47 NewInstance() {
47
		return new SchemaUpdater_41_47();
48
	}
49

    
50
	/**
51
	 * @param startSchemaVersion
52
	 * @param endSchemaVersion
53
	 */
54
	protected SchemaUpdater_41_47() {
55
		super(startSchemaVersion, endSchemaVersion);
56
	}
57

    
58
	@Override
59
	protected List<ISchemaUpdaterStep> getUpdaterList() {
60

    
61
		String stepName;
62
		String tableName;
63
		ISchemaUpdaterStep step;
64
		String newColumnName;
65

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

    
68
	    //#6600 remove Unique indexes from Rights MN tables
69
        removeUniqueIndexForRights(stepList);
70

    
71

    
72
		//#6529
73
		//Extend WorkingSet to allow a more fine grained definiton of taxon set
74
		//min rank
75
        stepName = "Add minRank column";
76
        tableName = "WorkingSet";
77
        newColumnName = "minRank_id";
78
        String referencedTable = "DefinedTermBase";
79
        step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, !NOT_NULL, referencedTable);
80
        stepList.add(step);
81

    
82
        //max rank
83
        stepName = "Add maxRank column";
84
        tableName = "WorkingSet";
85
        newColumnName = "maxRank_id";
86
        referencedTable = "DefinedTermBase";
87
        step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, !NOT_NULL, referencedTable);
88
        stepList.add(step);
89

    
90
        //subtree filter
91
        stepName= "Add geo filter MN table to WorkingSet";
92
        String firstTableName = "WorkingSet";
93
        String secondTableAlias = "NamedArea";
94
        String secondTableName = "DefinedTermBase";
95
        String attributeName = "geoFilter";
96
        boolean isList = ! IS_LIST;
97
        step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, secondTableAlias, attributeName, INCLUDE_AUDIT, isList, IS_M_TO_M);
98
        stepList.add(step);
99

    
100
        //subtree filter
101
        stepName= "Add subtree filter MN table to WorkingSet";
102
        firstTableName = "WorkingSet";
103
        secondTableName = "TaxonNode";
104
        secondTableAlias = null;
105
        attributeName = "taxonSubtreeFilter";
106
        isList = ! IS_LIST;
107
        step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, secondTableAlias, attributeName, INCLUDE_AUDIT, isList, IS_M_TO_M);
108
        stepList.add(step);
109

    
110
        //#6258
111
        stepName = "Add Registration table";
112
        tableName = "Registration";
113
        String[] columnNames = new String[]{"identifier","specificIdentifier","registrationDate","status",
114
                "institution_id","name_id","submitter_id"};
115
        String[] referencedTables = new String[]{null, null, null, null,
116
                "AgentBase","TaxonNameBase","User"};
117
        String[] columnTypes = new String[]{"string_255","string_255","datetime","string_10","int","int","int"};
118
        step = TableCreator.NewAnnotatableInstance(stepName, tableName,
119
                columnNames, columnTypes, referencedTables, INCLUDE_AUDIT);
120
        stepList.add(step);
121

    
122
        //add blockedBy_id
123
        stepName= "Add blockedBy_id to Registration";
124
        firstTableName = "Registration";
125
        secondTableName = "Registration";
126
        attributeName = "blockedBy";
127
        isList = ! IS_LIST;
128
        step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, null, attributeName, INCLUDE_AUDIT, isList, IS_M_TO_M);
129
        stepList.add(step);
130

    
131
        //add type designations
132
        stepName= "Add type designations to Registration";
133
        firstTableName = "Registration";
134
        String firstColumnName = "registrations";
135
        secondTableName = "TypeDesignationBase";
136
        attributeName = "typeDesignations";
137
        isList = false;
138
        step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, firstColumnName, secondTableName, null, attributeName, INCLUDE_AUDIT, isList, IS_M_TO_M);
139
        stepList.add(step);
140

    
141
        //#5258
142
        //Add "accessed" to Reference
143
        stepName = "Add 'accessed' to Reference";
144
        tableName = "Reference";
145
        newColumnName = "accessed";
146
        step = ColumnAdder.NewDateTimeInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, !NOT_NULL);
147
        stepList.add(step);
148

    
149
        //#6618 Add structure column to DefinedTermBase (Character)
150
        stepName = "Add structure column to DefinedTermBase (Character)";
151
        tableName = "DefinedTermBase";
152
        newColumnName = "structure_id";
153
        referencedTable = "FeatureNode";
154
        step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, !NOT_NULL, referencedTable);
155
        stepList.add(step);
156

    
157
        //#6618 Add property column to DefinedTermBase (Character)
158
        stepName = "Add property column to DefinedTermBase (Character)";
159
        tableName = "DefinedTermBase";
160
        newColumnName = "property_id";
161
        referencedTable = "FeatureNode";
162
        step = ColumnAdder.NewIntegerInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, !NOT_NULL, referencedTable);
163
        stepList.add(step);
164

    
165
        //#6361 and children
166
        mergeTaxonName(stepList);
167

    
168
        //#6535 update termtype for CdmMetaData (int => string)
169
        updateTermTypeForCdmMetaDataPropertyName(stepList);
170

    
171
        //##6661 Add initials to agent base
172
        stepName = "Add initials to AgentBase";
173
        tableName = "AgentBase";
174
        newColumnName = "initials";
175
        int length = 50;
176
        step = ColumnAdder.NewStringInstance(stepName, tableName, newColumnName, length, INCLUDE_AUDIT);
177
        stepList.add(step);
178

    
179
        stepName = "Update initials and firstname";
180
        step = InitialsUpdater.NewInstance();
181
        stepList.add(step);
182

    
183

    
184
        //ModelUpdateResult
185

    
186
        //Remove termupdater and allow update only from version 4.0
187

    
188

    
189

    
190
        return stepList;
191
    }
192

    
193
    /**
194
     * @param stepList
195
     */
196
	//#6600 remove Unique indexes from Rights MN tables
197
    private void removeUniqueIndexForRights(List<ISchemaUpdaterStep> stepList) {
198
        String tableName;
199
        ISchemaUpdaterStep step;
200

    
201
        tableName = "AgentBase_RightsInfo";
202
        String columnName = "rights_id";
203
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
204
        stepList.add(step);
205

    
206
        tableName = "Classification_RightsInfo";
207
        columnName = "rights_id";
208
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
209
        stepList.add(step);
210

    
211
        tableName = "Collection_RightsInfo";
212
        columnName = "rights_id";
213
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
214
        stepList.add(step);
215

    
216
        tableName = "DefinedTermBase_RightsInfo";
217
        columnName = "rights_id";
218
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
219
        stepList.add(step);
220

    
221
        tableName = "DescriptionBase_RightsInfo";
222
        columnName = "rights_id";
223
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
224
        stepList.add(step);
225

    
226
        tableName = "FeatureTree_RightsInfo";
227
        columnName = "rights_id";
228
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
229
        stepList.add(step);
230

    
231
        tableName = "Media_RightsInfo";
232
        columnName = "rights_id";
233
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
234
        stepList.add(step);
235

    
236
        tableName = "PolytomousKey_RightsInfo";
237
        columnName = "rights_id";
238
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
239
        stepList.add(step);
240

    
241
        tableName = "Reference_RightsInfo";
242
        columnName = "rights_id";
243
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
244
        stepList.add(step);
245

    
246
        tableName = "SpecimenOrObservationBase_RightsInfo";
247
        columnName = "rights_id";
248
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
249
        stepList.add(step);
250

    
251
        tableName = "TaxonBase_RightsInfo";
252
        columnName = "rights_id";
253
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
254
        stepList.add(step);
255

    
256
        tableName = "TaxonNameBase_RightsInfo";
257
        columnName = "rights_id";
258
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
259
        stepList.add(step);
260

    
261
        tableName = "TermVocabulary_RightsInfo";
262
        columnName = "rights_id";
263
        step = UniqueIndexDropper.NewInstance(tableName, columnName, !INCLUDE_AUDIT);
264
        stepList.add(step);
265
    }
266

    
267

    
268
    /**
269
     * #6535 update termtype for CdmMetaData (int => string)
270
     */
271
    private void updateTermTypeForCdmMetaDataPropertyName(List<ISchemaUpdaterStep> stepList) {
272
        String stepName = "Rename CdmMetaData.propertyName column";
273
        String tableName = "CdmMetaData";
274
        String oldColumnName = "propertyName";
275
        String newColumnName = "propertyNameOld";
276
        ISchemaUpdaterStep step = ColumnNameChanger.NewIntegerInstance(stepName, tableName, oldColumnName, newColumnName, ! INCLUDE_AUDIT);
277
        stepList.add(step);
278

    
279
        //... create new column
280
        stepName = "Create new CdmMetaData.propertyName column";
281
        tableName = "CdmMetaData";
282
        newColumnName = "propertyName";
283
        step = ColumnAdder.NewStringInstance(stepName, tableName, newColumnName, 20, ! INCLUDE_AUDIT);
284
        stepList.add(step);
285

    
286
        updateSingleTermTypeForCdmMetaDataPropertyName(stepList, "SCHEMA_VERSION", 1 );
287
        updateSingleTermTypeForCdmMetaDataPropertyName(stepList, "TERM_VERSION", 2 );
288
        updateSingleTermTypeForCdmMetaDataPropertyName(stepList, "CREATED", 3 );
289
        updateSingleTermTypeForCdmMetaDataPropertyName(stepList, "CREATE_NOTE", 4 );
290
        updateSingleTermTypeForCdmMetaDataPropertyName(stepList, "INST_NAME", 5 );
291
        updateSingleTermTypeForCdmMetaDataPropertyName(stepList, "INST_ID", 6 );
292

    
293
    }
294

    
295

    
296
    /**
297
     * @param stepList
298
     * @param name
299
     * @param index
300
     */
301
    private void updateSingleTermTypeForCdmMetaDataPropertyName(List<ISchemaUpdaterStep> stepList,
302
            String name, int index) {
303
        String stepName = "Update value for " + name;
304
        String query = "UPDATE @@CdmMetaData@@ SET propertyName = '"+name+"' WHERE propertyNameOld = "+index;
305
        ISchemaUpdaterStep step = SimpleSchemaUpdaterStep.NewNonAuditedInstance(stepName, query, -99);
306
        stepList.add(step);
307

    
308
    }
309

    
310
    /**
311
     * #6361 and children
312
     */
313
    private void mergeTaxonName(List<ISchemaUpdaterStep> stepList) {
314

    
315
        //#6367 Add nameType column to TaxonNameBase
316
        String stepName = "Add nameType column to TaxonNameBase";
317
        String tableName = "TaxonNameBase";
318
        String newColumnName = "nameType";
319
        int length = 15;
320
        ISchemaUpdaterStep step = ColumnAdder.NewStringInstance(stepName, tableName, newColumnName, length, INCLUDE_AUDIT);
321
        stepList.add(step);
322

    
323
        //#6367 #6368
324
        updateNameTypes(stepList);
325

    
326

    
327
    }
328

    
329
    /**
330
     * #6367
331
     */
332
    private void updateNameTypes(List<ISchemaUpdaterStep> stepList) {
333
        updateSingleNameType(stepList, "ViralName", "ICVCN");
334
        updateSingleNameType(stepList, "NonViralName", "NonViral");
335
        updateSingleNameType(stepList, "BotanicalName", "ICNAFP");
336
        updateSingleNameType(stepList, "ZoologicalName", "ICZN");
337
        updateSingleNameType(stepList, "CultivarPlantName", "ICNCP");
338
        updateSingleNameType(stepList, "BacterialName", "ICNB");
339
    }
340

    
341
    /**
342
     * @param uuid the uuid
343
     * @param oldSymbol
344
     * @param newSybol
345
     */
346
    private void updateSingleNameType(List<ISchemaUpdaterStep> stepList,
347
            String dtype, String nameType) {
348

    
349
        String stepName = "Update nameType for " + dtype;
350
        String query = "UPDATE @@TaxonNameBase@@ tnb "
351
                + " SET nameType = '" + nameType + "'"
352
                + " WHERE dtype = '" + dtype + "'" ;
353
        SimpleSchemaUpdaterStep simpleStep = SimpleSchemaUpdaterStep.NewAuditedInstance(stepName, query, "TaxonNameBase", -99);
354
        stepList.add(simpleStep);
355
    }
356

    
357
    @Override
358
	public ISchemaUpdater getNextUpdater() {
359
		return null;
360
	}
361

    
362
	@Override
363
	public ISchemaUpdater getPreviousUpdater() {
364
		return SchemaUpdater_40_41.NewInstance();
365
	}
366

    
367
}
(2-2/2)