Project

General

Profile

Download (4.8 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 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
package eu.etaxonomy.cdm.database.update;
10

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

    
14
import org.apache.log4j.Logger;
15

    
16
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
17
import eu.etaxonomy.cdm.database.ICdmDataSource;
18

    
19
/**
20
 * Updates the base type of a class.
21
 * E.g. if a class is VersionableEntity it may be upgraded to AnnotatableEntity
22
 * @since 2015-03-20
23
 * @author a.mueller
24
 */
25
public class ClassBaseTypeUpdater extends AuditedSchemaUpdaterStepBase {
26

    
27
    @SuppressWarnings("unused")
28
	private static final Logger logger = Logger.getLogger(TableCreator.class);
29

    
30
	private final boolean includeIdentifiableEntity;
31
	private final boolean includeAnnotatableEntity;
32
	protected List<ISchemaUpdaterStep> mnTablesStepList = new ArrayList<>();
33
	protected List<ISchemaUpdaterStep> columnAdderStepList = new ArrayList<>();
34

    
35

    
36
	public static final ClassBaseTypeUpdater NewVersionableToAnnotatableInstance(String stepName, String tableName, boolean includeAudTable){
37
		return new ClassBaseTypeUpdater(stepName, tableName, includeAudTable, true, false);
38
	}
39
	public static final ClassBaseTypeUpdater NewAnnotatableToIdentifiableInstance(String stepName, String tableName, boolean includeAudTable){
40
		return new ClassBaseTypeUpdater(stepName, tableName, includeAudTable, false, true);
41
	}
42
	public static final ClassBaseTypeUpdater NewVersionableToIdentifiableInstance(String stepName, String tableName, boolean includeAudTable){
43
		return new ClassBaseTypeUpdater(stepName, tableName, includeAudTable, true, true);
44
	}
45

    
46
	protected ClassBaseTypeUpdater(String stepName, String tableName, boolean includeAudit, boolean includeAnnotatable, boolean includeIdentifiable) {
47
		super(stepName, tableName, includeAudit);
48
		this.includeAnnotatableEntity = includeAnnotatable;
49
		this.includeIdentifiableEntity = includeIdentifiable;
50
		TableCreator.makeMnTables(mnTablesStepList, tableName, includeAnnotatable, includeIdentifiable);
51
		makeColumns();
52
	}
53

    
54

    
55
	private void makeColumns() {
56
		String innerStepName;
57
		String newColumnName;
58
		ColumnAdder adder;
59
		if (this.includeIdentifiableEntity){
60

    
61
			//lsid authority
62
			innerStepName = "-add lsid_authority";
63
			newColumnName = "lsid_authority";
64
			adder = ColumnAdder.NewStringInstance(stepName + innerStepName, tableName,
65
					newColumnName, SchemaUpdaterBase.INCLUDE_AUDIT);
66
			this.columnAdderStepList.add(adder);
67

    
68
			//lsid lsid
69
			innerStepName = "-add lsid_lsid";
70
			newColumnName = "lsid_lsid";
71
			adder = ColumnAdder.NewStringInstance(stepName + innerStepName, tableName,
72
					newColumnName, SchemaUpdaterBase.INCLUDE_AUDIT);
73
			this.columnAdderStepList.add(adder);
74

    
75
			//lsid namespace
76
			innerStepName = "-add lsid_namespace";
77
			newColumnName = "lsid_namespace";
78
			adder = ColumnAdder.NewStringInstance(stepName + innerStepName, tableName,
79
					newColumnName, SchemaUpdaterBase.INCLUDE_AUDIT);
80
			this.columnAdderStepList.add(adder);
81

    
82
			//lsid object
83
			innerStepName = "-add lsid_object";
84
			newColumnName = "lsid_object";
85
			adder = ColumnAdder.NewStringInstance(stepName + innerStepName, tableName,
86
					newColumnName, SchemaUpdaterBase.INCLUDE_AUDIT);
87
			this.columnAdderStepList.add(adder);
88

    
89
			//lsid revision
90
			innerStepName = "-add lsid_revision";
91
			newColumnName = "lsid_revision";
92
			adder = ColumnAdder.NewStringInstance(stepName + innerStepName, tableName,
93
					newColumnName, SchemaUpdaterBase.INCLUDE_AUDIT);
94
			this.columnAdderStepList.add(adder);
95

    
96
			//protected title cache
97
			innerStepName = "-add protected title cache";
98
			newColumnName = "protectedTitleCache";
99
			adder = ColumnAdder.NewBooleanInstance(innerStepName, tableName, newColumnName,
100
					SchemaUpdaterBase.INCLUDE_AUDIT, false);
101

    
102
			adder = ColumnAdder.NewStringInstance(stepName + innerStepName, tableName,
103
					newColumnName, SchemaUpdaterBase.INCLUDE_AUDIT);
104
			this.columnAdderStepList.add(adder);
105

    
106
			//title cache
107
			innerStepName = "-add titleCache";
108
			newColumnName = "titleCache";
109
			adder = ColumnAdder.NewStringInstance(stepName + innerStepName, tableName,
110
					newColumnName, SchemaUpdaterBase.INCLUDE_AUDIT);
111
			this.columnAdderStepList.add(adder);
112
		}
113
	}
114

    
115
	@Override
116
	protected void invokeOnTable(String tableName, ICdmDataSource datasource,
117
	        IProgressMonitor monitor, CaseType caseType, SchemaUpdateResult result)  {
118
		//we only do have inner steps here
119
		return;
120
	}
121

    
122

    
123
	@Override
124
	public List<ISchemaUpdaterStep> getInnerSteps() {
125
		List<ISchemaUpdaterStep> result = new ArrayList<>( mnTablesStepList);
126
		result.addAll(columnAdderStepList);
127
		return result;
128
	}
129

    
130
}
(4-4/35)