})
@MappedSuperclass
@Audited
-public abstract class TermBase extends IdentifiableEntity<IIdentifiableEntityCacheStrategy >{
+public abstract class TermBase extends IdentifiableEntity<IIdentifiableEntityCacheStrategy<TermBase> >{
private static final long serialVersionUID = 1471561531632115822L;
@SuppressWarnings("unused")
private static final Logger logger = Logger.getLogger(TermBase.class);
@XmlType(name = "WorkingSet", propOrder = {
"representations",
"descriptiveSystem",
- "descriptions"
+ "descriptions",
+ "taxonSubtreeFilter",
+ "geoFilter",
+ "minRank",
+ "maxRank"
})
@XmlRootElement(name = "WorkingSet")
@Entity
@Audited
-
public class WorkingSet extends AnnotatableEntity {
private static final long serialVersionUID = 3256448866757415686L;
private static final Logger logger = Logger.getLogger(WorkingSet.class);
@XmlSchemaType(name = "IDREF")
@OneToMany(mappedBy="amplificationResult" , fetch = FetchType.LAZY)
@Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
- private Set<SingleRead> singleReads = new HashSet<SingleRead>();
+ private Set<SingleRead> singleReads = new HashSet<>();
@XmlElement(name = "Cloning")
@XmlIDREF
* @date 2015-03-20\r
* @author a.mueller\r
*/\r
-public class ClassBaseTypeUpdater extends AuditedSchemaUpdaterStepBase<ClassBaseTypeUpdater> implements ISchemaUpdaterStep {\r
+public class ClassBaseTypeUpdater extends AuditedSchemaUpdaterStepBase<ClassBaseTypeUpdater> {\r
@SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(TableCreator.class);\r
\r
- private static final boolean SORT_INDEX = true;\r
-\r
private final boolean includeIdentifiableEntity;\r
private final boolean includeAnnotatableEntity;\r
- protected List<ISchemaUpdaterStep> mnTablesStepList = new ArrayList<ISchemaUpdaterStep>();\r
- protected List<ISchemaUpdaterStep> columnAdderStepList = new ArrayList<ISchemaUpdaterStep>();\r
+ protected List<ISchemaUpdaterStep> mnTablesStepList = new ArrayList<>();\r
+ protected List<ISchemaUpdaterStep> columnAdderStepList = new ArrayList<>();\r
\r
\r
public static final ClassBaseTypeUpdater NewVersionableToAnnotatableInstance(String stepName, String tableName, boolean includeAudTable){\r
\r
@Override\r
public List<ISchemaUpdaterStep> getInnerSteps() {\r
- List<ISchemaUpdaterStep> result = new ArrayList<ISchemaUpdaterStep>\r
- ( mnTablesStepList);\r
+ List<ISchemaUpdaterStep> result = new ArrayList<>( mnTablesStepList);\r
result.addAll(columnAdderStepList);\r
return result;\r
}\r
* @date 16.09.2010\r
*\r
*/\r
-public class ColumnAdder extends AuditedSchemaUpdaterStepBase<ColumnAdder> implements ISchemaUpdaterStep {\r
+public class ColumnAdder extends AuditedSchemaUpdaterStepBase<ColumnAdder> {\r
private static final Logger logger = Logger.getLogger(ColumnAdder.class);\r
\r
private final String newColumnName;\r
private final String columnType;\r
private final Object defaultValue;\r
private boolean isNotNull;\r
-\r
private final String referencedTable;\r
\r
/**\r
return referencedTable;\r
}\r
\r
-\r
public String getNewColumnName() {\r
return newColumnName;\r
}\r
-\r
}\r
* @date 16.09.2010
*
*/
-public class IndexAdder extends SchemaUpdaterStepBase<IndexAdder> implements ISchemaUpdaterStep {
+public class IndexAdder extends SchemaUpdaterStepBase<IndexAdder> {
private static final Logger logger = Logger.getLogger(IndexAdder.class);
private String tableName;
private Integer length;
- public static final IndexAdder NewInstance(String stepName, String tableName, String columnName, Integer length){
- return new IndexAdder(stepName, tableName, columnName, length);
+// ********************** FACTORY ****************************************/
+
+ public static final IndexAdder NewStringInstance(String stepName, String tableName, String columnName, Integer length){
+ return new IndexAdder(stepName, tableName, columnName, length == null ? 255 : length);
}
+ public static final IndexAdder NewIntegerInstance(String stepName, String tableName, String columnName){
+ return new IndexAdder(stepName, tableName, columnName, null);
+ }
+
+// **************************** CONSTRUCTOR *********************************/
protected IndexAdder(String stepName, String tableName, String columnName, Integer length) {
super(stepName);
this.tableName = tableName;
this.columnName = columnName;
- this.length = length == null ? 255 :length;
+ this.length = length;
}
datasource.executeUpdate(updateQuery);
return true;
} catch (Exception e) {
- logger.warn("Unique index for username could not be created");
+ logger.warn("Unique index for " + columnName + " could not be created");
return false;
}
}
String updateQuery;
if (type.equals(DatabaseTypeEnum.MySQL)){
//Maybe MySQL also works with the below syntax. Did not check yet.
- updateQuery = "ALTER TABLE @@"+ tableName + "@@ ADD INDEX " + constraintName + " ("+columnName+"("+length+"));";
+ updateQuery = "ALTER TABLE @@"+ tableName + "@@ ADD INDEX " + constraintName + " ("+columnName+ makeLength()+");";
}else if (type.equals(DatabaseTypeEnum.H2) || type.equals(DatabaseTypeEnum.PostgreSQL) || type.equals(DatabaseTypeEnum.SqlServer2005)){
updateQuery = "CREATE INDEX " + constraintName + " ON "+tableName+"(" + columnName + ")";
}else{
return updateQuery;
}
- private boolean removeExistingConstraint(ICdmDataSource datasource, CaseType caseType) {
+ /**
+ * @param length2
+ * @return
+ */
+ private String makeLength() {
+ if (length != null){
+ return "(" + length + ")";
+ }else{
+ return "";
+ }
+ }
+
+ private boolean removeExistingConstraint(ICdmDataSource datasource, CaseType caseType) {
try {
DatabaseTypeEnum type = datasource.getDatabaseType();
String indexName = "_UniqueKey";
import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.List;\r
-\r
-import org.apache.commons.lang.StringUtils;\r
+import java.util.Map;\r
\r
/**\r
* Creates an MN table\r
\r
private String firstTableName;\r
private String firstTableAlias;\r
+ private String firstColumnName;\r
private String secondTableName;\r
private String secondTableAlias;\r
- //is a sort index column needed.\r
- private boolean hasSortIndex;\r
- //is the key of the MN table including the FK to the second table?\r
- private boolean secondTableInKey;\r
-\r
- public static MnTableCreator NewMnInstance(String stepName, String firstTableName, String secondTableName, boolean includeAudTable){\r
- MnTableCreator result = new MnTableCreator(stepName, firstTableName, null, secondTableName, null, new String[]{}, new String[]{}, null, null, includeAudTable, false, true, false, false, false);\r
+ private String secondColumnName;\r
+ //is the MN table used for a list, if yes, a sortIndex column is needed\r
+ //and the and the sortindex column needs to be in the key instead of second table column.\r
+ private boolean isList;\r
+ private boolean is1toM;\r
+\r
+ public static MnTableCreator NewMnInstance(String stepName, String firstTableName, String secondTableName, boolean includeAudTable, boolean isList, boolean is1toM){\r
+ MnTableCreator result = new MnTableCreator(stepName, firstTableName, null, null, secondTableName, null, null, new String[]{}, new String[]{}, null, null, includeAudTable, isList, is1toM, false, false, false);\r
return result;\r
}\r
\r
- public static MnTableCreator NewMnInstance(String stepName, String firstTableName, String firstTableAlias, String secondTableName, String secondTableAlias, boolean includeAudTable, boolean hasSortIndex, boolean secondTableInKey){\r
- MnTableCreator result = new MnTableCreator(stepName, firstTableName, firstTableAlias, secondTableName, secondTableAlias, new String[]{}, new String[]{}, null, null, includeAudTable, hasSortIndex, secondTableInKey, false, false, false);\r
+ /**\r
+ *\r
+ * @param stepName The step name\r
+ * @param firstTableName The name of the first table\r
+ * @param firstTableAlias The alias for the first table as used in the MN table name\r
+ * @param secondTableName The name of the second table\r
+ * @param secondTableAlias The alias for the second table as used in the MN table name\r
+ * @param attributeName The name of the attribute pointing to the second table (this is used for the column name for the\r
+ * column pointing to the second table)\r
+ * @param includeAudTable <code>true</code> if also the Audit (_AUD) table should be created\r
+ * @param hasSortIndex by default <code>false</code> but true for {@link Map maps} (or maybe user defined MN-tables)\r
+ * @param secondTableInKey should the column that links to the second table also be in the key? This is by default\r
+ * <code>true</code> but for {@link List lists} should be <code>false</code>.\r
+ * @return\r
+ */\r
+ public static MnTableCreator NewMnInstance(String stepName, String firstTableName, String firstTableAlias, String secondTableName, String secondTableAlias, String attributeName,\r
+ boolean includeAudTable, boolean isList, boolean is1toM){\r
+ MnTableCreator result = new MnTableCreator(stepName, firstTableName, firstTableAlias, null, secondTableName, secondTableAlias, attributeName,\r
+ new String[]{}, new String[]{}, null, null,\r
+ includeAudTable, isList, is1toM, false, false, false);\r
return result;\r
}\r
\r
+// ****************************** CONSTRUCTOR *********************************/\r
\r
- protected MnTableCreator(String stepName, String firstTableName, String firstTableAlias, String secondTableName, String secondTableAlias, String[] columnNames, String[] columnTypes,\r
- List<Object> defaultValues, List<Boolean> isNull, boolean includeAudTable, boolean hasSortIndex, boolean secondTableInKey, boolean includeCdmBaseAttributes,boolean includeAnnotatableEntity, boolean includeIdentifiableEntity) {\r
- super(stepName, firstTableName + "_" + secondTableName, Arrays.asList(columnNames), Arrays.asList(columnTypes), defaultValues, isNull, new ArrayList<String>(), includeAudTable, includeCdmBaseAttributes, includeAnnotatableEntity, includeIdentifiableEntity, false);\r
+ protected MnTableCreator(String stepName, String firstTableName, String firstTableAlias, String firstColumnName, String secondTableName, String secondTableAlias, String secondColumnName,\r
+ String[] columnNames, String[] columnTypes, List<Object> defaultValues, List<Boolean> isNull,\r
+ boolean includeAudTable, boolean isList, boolean is1toM,\r
+ boolean includeCdmBaseAttributes, boolean includeAnnotatableEntity, boolean includeIdentifiableEntity) {\r
+ super(stepName, makeAlias(firstTableName, firstTableAlias) + "_" + makeAlias(secondTableName, secondTableAlias),\r
+ Arrays.asList(columnNames), Arrays.asList(columnTypes), defaultValues,\r
+ isNull, new ArrayList<>(), includeAudTable,\r
+ includeCdmBaseAttributes, includeAnnotatableEntity, includeIdentifiableEntity, false);\r
this.firstTableName = firstTableName;\r
this.secondTableName = secondTableName;\r
- this.firstTableAlias = (firstTableAlias != null )? firstTableAlias : firstTableName ;\r
- this.secondTableAlias = (secondTableAlias != null)? secondTableAlias : secondTableName ;\r
- this.hasSortIndex = hasSortIndex;\r
- this.secondTableInKey = secondTableInKey;\r
+ this.firstTableAlias = makeAlias(firstTableName, firstTableAlias) ;\r
+ this.secondTableAlias = makeAlias(secondTableName, secondTableAlias) ;\r
+ this.firstColumnName = (firstColumnName != null) ? firstColumnName : this.firstTableAlias;\r
+ this.secondColumnName = (secondColumnName != null) ? secondColumnName : this.secondTableAlias;\r
+ this.isList = isList;\r
+ this.is1toM = is1toM;\r
addMyColumns();\r
}\r
\r
+ /**\r
+ * @param secondTableName\r
+ * @param secondTableAlias\r
+ * @return\r
+ */\r
+ private static String makeAlias(String tableName, String alias) {\r
+ return (alias != null) ? alias : tableName;\r
+ }\r
+\r
\r
protected void addMyColumns(){\r
- this.columnAdders.add(ColumnAdder.NewIntegerInstance(stepName, tableName, getFirstIdColumn(), false, true, this.firstTableName));\r
- this.columnAdders.add(ColumnAdder.NewIntegerInstance(stepName, tableName, getSecondIdColumn(), false, true, this.secondTableName));\r
- if (this.hasSortIndex){\r
+ ColumnAdder firstColAdder = ColumnAdder.NewIntegerInstance(stepName, tableName, getFirstIdColumn(), false, true, this.firstTableName);\r
+ this.columnAdders.add(firstColAdder);\r
+ ColumnAdder secondColAdder = ColumnAdder.NewIntegerInstance(stepName, tableName, getSecondIdColumn(), false, true, this.secondTableName);\r
+// secondColAdder.addIndex(tableName+"_"+getSecondIdColumn(), null);\r
+ this.columnAdders.add(secondColAdder);\r
+ if (this.isList){\r
this.columnAdders.add(ColumnAdder.NewIntegerInstance(stepName, tableName, "sortIndex", false, true, null));\r
}\r
-\r
}\r
\r
@Override\r
String result = "";\r
if (! isAudit){\r
result = getFirstIdColumn() + ",";\r
- result += secondTableInKey ? getSecondIdColumn() + "," : "";\r
- result += hasSortIndex ? "sortIndex," : "";\r
+ result += (isList ? "sortIndex" : getSecondIdColumn());\r
}else{\r
result = "REV, " + primaryKey(false);\r
- result += (!secondTableInKey) ? ","+getSecondIdColumn() + "," : "";\r
+ //for AUDIT also the second table column is in PK\r
+ result += (isList) ? ","+getSecondIdColumn() : "";\r
}\r
- result = StringUtils.chomp(result.trim(), ",");\r
return result;\r
}\r
\r
@Override\r
protected String unique(boolean isAudit){\r
- if (! isAudit){\r
+ if (! isAudit && is1toM){\r
return getSecondIdColumn();\r
}else{\r
return null;\r
}\r
\r
private String getFirstIdColumn(){\r
- return this.firstTableAlias + "_id";\r
+ return this.firstColumnName + "_id";\r
}\r
\r
private String getSecondIdColumn(){\r
- String result = this.secondTableAlias.toLowerCase();\r
+ String result = this.secondColumnName.toLowerCase();\r
\r
- if (this.secondTableAlias.equalsIgnoreCase(this.secondTableName) ){\r
+ if (this.secondColumnName.equalsIgnoreCase(this.secondTableName) ){\r
if (! result.endsWith("s")){\r
result += "s";\r
}\r
@SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(SchemaUpdaterBase.class);\r
\r
- public static boolean INCLUDE_AUDIT = true;\r
- protected static boolean INCLUDE_CDM_BASE = true;\r
- protected static boolean NOT_NULL = true;\r
+ public static final boolean INCLUDE_AUDIT = true;\r
+ protected static final boolean INCLUDE_CDM_BASE = true;\r
+ protected static final boolean NOT_NULL = true;\r
+ protected static final boolean IS_LIST = true;\r
+ protected static final boolean IS_1_TO_M = true;\r
+ protected static final boolean IS_M_TO_M = false;\r
+\r
\r
// private List<ISchemaUpdaterStep> list;\r
\r
*/\r
package eu.etaxonomy.cdm.database.update;\r
\r
-import java.sql.SQLException;\r
import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.List;\r
public class TableCreator extends AuditedSchemaUpdaterStepBase<TableCreator> {\r
private static final Logger logger = Logger.getLogger(TableCreator.class);\r
\r
- private static final boolean SORT_INDEX = true;\r
+ private static final boolean IS_LIST = true;\r
+ private static final boolean IS_1_TO_M = true;\r
+ private static final boolean IS_M_TO_M = false;\r
+\r
\r
private final List<String> columnNames;\r
private final List<String> columnTypes;\r
private final boolean includeAnnotatableEntity;\r
private boolean includeEventBase;\r
private final boolean excludeVersionableAttributes;\r
- protected List<ColumnAdder> columnAdders = new ArrayList<ColumnAdder>();\r
- protected List<ISchemaUpdaterStep> mnTablesStepList = new ArrayList<ISchemaUpdaterStep>();\r
+ protected List<ColumnAdder> columnAdders = new ArrayList<>();\r
+ protected List<ISchemaUpdaterStep> mnTablesStepList = new ArrayList<>();\r
private String primaryKeyParams;\r
private String primaryKeyParams_AUD;\r
private String uniqueParams;\r
private String uniqueParams_AUD;\r
\r
\r
-// public static final TableCreator NewInstance(String stepName, String tableName, List<String> columnNames, List<String> columnTypes, List<Object> defaultValues, List<Boolean> isNull, boolean includeAudTable){\r
public static final TableCreator NewInstance(String stepName, String tableName, List<String> columnNames, List<String> columnTypes, boolean includeAudTable, boolean includeCdmBaseAttributes){\r
return new TableCreator(stepName, tableName, columnNames, columnTypes, null, null, null, includeAudTable, includeCdmBaseAttributes, false, false, false);\r
}\r
//annotations\r
stepName= "Add @tableName annotations";\r
stepName = stepName.replace("@tableName", tableName);\r
- tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, "Annotation", SchemaUpdaterBase.INCLUDE_AUDIT);\r
+ tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, "Annotation", SchemaUpdaterBase.INCLUDE_AUDIT, !IS_LIST, IS_1_TO_M);\r
mnTablesStepList.add(tableCreator);\r
\r
//marker\r
stepName= "Add @tableName marker";\r
stepName = stepName.replace("@tableName", tableName);\r
- tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, "Marker", SchemaUpdaterBase.INCLUDE_AUDIT);\r
+ tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, "Marker", SchemaUpdaterBase.INCLUDE_AUDIT, !IS_LIST, IS_1_TO_M);\r
mnTablesStepList.add(tableCreator);\r
-\r
}\r
\r
if (includeIdentifiable){\r
//credits\r
stepName= "Add @tableName credits";\r
stepName = stepName.replace("@tableName", tableName);\r
- tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, null, "Credit", null, SchemaUpdaterBase.INCLUDE_AUDIT, SORT_INDEX, false);\r
+ tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, null, "Credit", null, null, SchemaUpdaterBase.INCLUDE_AUDIT, IS_LIST, IS_1_TO_M);\r
mnTablesStepList.add(tableCreator);\r
\r
-\r
//identifier\r
stepName= "Add @tableName identifiers";\r
stepName = stepName.replace("@tableName", tableName);\r
- tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, null, "Identifier", null, SchemaUpdaterBase.INCLUDE_AUDIT, SORT_INDEX, false);\r
+ tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, null, "Identifier", null, null, SchemaUpdaterBase.INCLUDE_AUDIT, IS_LIST, IS_1_TO_M);\r
mnTablesStepList.add(tableCreator);\r
\r
-\r
//extensions\r
stepName= "Add @tableName extensions";\r
stepName = stepName.replace("@tableName", tableName);\r
- tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, "Extension", SchemaUpdaterBase.INCLUDE_AUDIT);\r
+ tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, "Extension", SchemaUpdaterBase.INCLUDE_AUDIT, !IS_LIST, IS_1_TO_M);\r
mnTablesStepList.add(tableCreator);\r
\r
//OriginalSourceBase\r
stepName= "Add @tableName sources";\r
stepName = stepName.replace("@tableName", tableName);\r
- tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, null, "OriginalSourceBase", "sources", SchemaUpdaterBase.INCLUDE_AUDIT, false, true);\r
+ tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, null, "OriginalSourceBase", null, "sources", SchemaUpdaterBase.INCLUDE_AUDIT, ! IS_LIST, IS_1_TO_M);\r
mnTablesStepList.add(tableCreator);\r
\r
//Rights\r
stepName= "Add @tableName rights";\r
stepName = stepName.replace("@tableName", tableName);\r
- tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, "Rights", SchemaUpdaterBase.INCLUDE_AUDIT);\r
+ tableCreator = MnTableCreator.NewMnInstance(stepName, tableName, "Rights", SchemaUpdaterBase.INCLUDE_AUDIT, !IS_LIST, IS_M_TO_M);\r
mnTablesStepList.add(tableCreator);\r
}\r
}\r
}\r
\r
\r
- private boolean createForeignKeys(String tableName, boolean isAudit, ICdmDataSource datasource, IProgressMonitor monitor, CaseType caseType) throws SQLException {\r
+ private boolean createForeignKeys(String tableName, boolean isAudit, ICdmDataSource datasource, IProgressMonitor monitor, CaseType caseType) {\r
boolean result = true;\r
if (includeCdmBaseAttributes){\r
- if (! this.excludeVersionableAttributes){\r
+ //updatedBy\r
+ if (! this.excludeVersionableAttributes){\r
String attribute = "updatedby";\r
String referencedTable = "UserAccount";\r
result &= makeForeignKey(tableName, datasource, monitor, attribute, referencedTable, caseType);\r
}\r
\r
+ //createdBy\r
String attribute = "createdby";\r
String referencedTable = "UserAccount";\r
result &= makeForeignKey(tableName, datasource, monitor, attribute, referencedTable, caseType);\r
\r
}\r
if (isAudit){\r
+ //REV\r
String attribute = "REV";\r
String referencedTable = "AuditEvent";\r
result &= makeForeignKey(tableName, datasource, monitor, attribute, referencedTable, caseType);\r
}\r
if (this.includeEventBase){\r
- String attribute = "actor_id";\r
+ //actor\r
+ String attribute = "actor_id";\r
String referencedTable = "AgentBase";\r
result &= makeForeignKey(tableName, datasource, monitor, attribute, referencedTable, caseType);\r
}\r
return result;\r
}\r
\r
- public static boolean makeForeignKey(String tableName, ICdmDataSource datasource, IProgressMonitor monitor, String attribute, String referencedTable, CaseType caseType) throws SQLException {\r
+\r
+ public static boolean makeForeignKey(String tableName, ICdmDataSource datasource, IProgressMonitor monitor, String attribute, String referencedTable, CaseType caseType) {\r
boolean result = true;\r
\r
referencedTable = caseType.transformTo(referencedTable);\r
\r
+ String idSuffix = "_id";\r
+ if (isRevAttribute(attribute) || attribute.endsWith(idSuffix)){\r
+ idSuffix = "";\r
+ }\r
+ String columnName = attribute + idSuffix;\r
+\r
if (supportsForeignKeys(datasource, monitor, tableName, referencedTable)){\r
String index = "FK@tableName_@attribute";\r
index = index.replace("@tableName", tableName);\r
index = index.replace("@attribute", attribute);\r
\r
- String idSuffix = "_id";\r
- if (isRevAttribute(attribute) || attribute.endsWith(idSuffix)){\r
- idSuffix = "";\r
- }\r
+\r
//OLD - don't remember why we used ADD INDEX here\r
// String updateQuery = "ALTER TABLE @tableName ADD INDEX @index (@attribute), ADD FOREIGN KEY (@attribute) REFERENCES @referencedTable (@id)";\r
String updateQuery = "ALTER TABLE @tableName ADD @constraintName FOREIGN KEY (@attribute) REFERENCES @referencedTable (@id)";\r
updateQuery = updateQuery.replace("@tableName", tableName);\r
// updateQuery = updateQuery.replace("@index", index);\r
- updateQuery = updateQuery.replace("@attribute", attribute + idSuffix);\r
+ updateQuery = updateQuery.replace("@attribute", columnName);\r
updateQuery = updateQuery.replace("@referencedTable", referencedTable);\r
if (datasource.getDatabaseType().equals(DatabaseTypeEnum.MySQL)){\r
updateQuery = updateQuery.replace("@constraintName", "CONSTRAINT " + index);\r
}\r
return result;\r
}else{\r
- return true;\r
+ //create only index\r
+ IndexAdder indexAdder = IndexAdder.NewIntegerInstance("Add index instead of Foreign Key", tableName, columnName);\r
+ try {\r
+ indexAdder.invoke(datasource, monitor, caseType);\r
+ } catch (Exception e) {\r
+ String message = "Problem when creating index instead of Foreign Key for " + tableName +"." + columnName +": " + e.getMessage();\r
+ monitor.warning(message);\r
+ logger.warn(message, e);\r
+ return true; //we do not interrupt update if only index generation did not work\r
+ }\r
+ return result;\r
}\r
-\r
}\r
\r
/**\r
monitor.warning(message);\r
return true; //default\r
}\r
-\r
}\r
-\r
-\r
}\r
\r
private static boolean isRevAttribute(String attribute) {\r
/**
* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
-*
+*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
private static final Logger logger = Logger.getLogger(SchemaUpdater_25_30.class);
private static final String startSchemaVersion = "2.5.0.0.201009211255";
private static final String endSchemaVersion = "3.0.0.0.201011090000";
-
+
// ********************** FACTORY METHOD *******************************************
-
+
public static SchemaUpdater_25_30 NewInstance(){
return new SchemaUpdater_25_30();
}
-
+
/**
* @param startSchemaVersion
* @param endSchemaVersion
protected SchemaUpdater_25_30() {
super(startSchemaVersion, endSchemaVersion);
}
-
+
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.database.update.SchemaUpdaterBase#getUpdaterList()
*/
@Override
protected List<ISchemaUpdaterStep> getUpdaterList() {
-
+
List<ISchemaUpdaterStep> stepList = new ArrayList<ISchemaUpdaterStep>();
String stepName;
-
+
//add feature tree attribute to feature node table
stepName = "Add feature tree addtribue to feature node";
//TODO defaultValue & not null
ColumnAdder featureTreeColAdder = ColumnAdder.NewIntegerInstance(stepName, "FeatureNode", "FeatureTree_id", INCLUDE_AUDIT, false, "FeatureTree");
stepList.add(featureTreeColAdder);
-
+
//compute feature tree column
stepName = "Update feature node tree column";
FeatureNodeTreeColumnUpdater fntcu = FeatureNodeTreeColumnUpdater.NewInstance(stepName, INCLUDE_AUDIT);
stepList.add(fntcu);
-
+
//Key statement
stepName = "Create KeyStatement tables";
TableCreator tableCreator = TableCreator.NewInstance(stepName, "KeyStatement", new String[]{}, new String[]{}, new String[]{}, INCLUDE_AUDIT, INCLUDE_CDM_BASE);
stepList.add(tableCreator);
-
+
//KeyStatement_LanguageString
stepName = "Create KeyStatement label";
tableCreator = MapTableCreator.NewMapTableInstance(stepName, "KeyStatement", null, "LanguageString", "label", "DefinedTermBase", SchemaUpdaterBase.INCLUDE_AUDIT);
stepList.add(tableCreator);
-
+
//PolytomousKey
stepName = "Create PolytomousKey tables";
tableCreator = TableCreator.NewIdentifiableInstance(stepName, "PolytomousKey", new String[]{"root_id"}, new String[]{"int"}, new String[]{"PolytomousKeyNode"}, INCLUDE_AUDIT);
stepList.add(tableCreator);
-
+
//create table PolytomousKeyNode_PolytomousKeyNode_AUD (REV integer not null, parent_id integer not null, id integer not null, sortIndex integer not null, revtype tinyint, primary key (REV, parent_id, id, sortIndex)) ENGINE=MYISAM DEFAULT CHARSET=utf8
tableCreator = TableCreator.NewInstance(stepName, "PolytomousKeyNode_PolytomousKeyNode_AUD", new String[]{"REV", "parent_id", "id", "sortIndex", "revtype"}, new String[]{"int","int","int","int","tinyint"}, new String[]{null, "PolytomousKeyNode", null, null, null},! INCLUDE_AUDIT, ! INCLUDE_CDM_BASE);
tableCreator.setPrimaryKeyParams("REV, parent_id, id, sortIndex", null);
tableCreator.setUniqueParams(null, null);
stepList.add(tableCreator);
-
+
//covered taxa
stepName= "Add polytomous key covered taxa";
- tableCreator = MnTableCreator.NewMnInstance(stepName, "PolytomousKey", null, "TaxonBase", "coveredtaxa", SchemaUpdaterBase.INCLUDE_AUDIT, false, true);
+ tableCreator = MnTableCreator.NewMnInstance(stepName, "PolytomousKey", null, "TaxonBase", null, "coveredtaxa", SchemaUpdaterBase.INCLUDE_AUDIT, false, false);
stepList.add(tableCreator);
//Polytomous key node
stepName = "Create PolytomousKeyNode modifying text";
tableCreator = MapTableCreator.NewMapTableInstance(stepName, "PolytomousKeyNode", null, "LanguageString", "modifyingtext", "DefinedTermBase", SchemaUpdaterBase.INCLUDE_AUDIT);
stepList.add(tableCreator);
-
+
//rename named area featureTree_id
stepName = "Rename polytomouskey_namedarea.featureTree_id -> polytomouskey_id";
ColumnNameChanger colChanger = ColumnNameChanger.NewIntegerInstance(stepName, "PolytomousKey_NamedArea", "FeatureTree_id", "PolytomousKey_id", INCLUDE_AUDIT);
stepList.add(colChanger);
-
+
//rename polytomouskey_scope featureTree_id
stepName = "Rename polytomouskey_scope.featureTree_id -> polytomouskey_id";
colChanger = ColumnNameChanger.NewIntegerInstance(stepName, "PolytomousKey_Scope", "FeatureTree_id", "PolytomousKey_id", INCLUDE_AUDIT);
stepName = "Move polytomous key data from feature tree to polytomous key";
PolytomousKeyDataMover dataMover = PolytomousKeyDataMover.NewInstance(stepName, INCLUDE_AUDIT);
stepList.add(dataMover);
-
+
//remove DTYPE from feature node
stepName = "Remove feature tree DTYPE column";
ColumnRemover colRemover = ColumnRemover.NewInstance(stepName, "FeatureTree", "DTYPE", INCLUDE_AUDIT);
stepList.add(colRemover);
-
+
//remove feature node taxon column
stepName = "Remove feature node taxon column";
colRemover = ColumnRemover.NewInstance(stepName, "FeatureNode", "taxon_id", INCLUDE_AUDIT);
stepName = "Remove FeatureNode_Representation MN";
TableDroper tableDropper = TableDroper.NewInstance(stepName, "FeatureNode_Representation", INCLUDE_AUDIT);
stepList.add(tableDropper);
-
-
+
+
//add exsiccatum
stepName = "Add exsiccatum to specimen";
ColumnAdder exsiccatumAdder = ColumnAdder.NewStringInstance(stepName, "SpecimenOrObservationBase", "exsiccatum", INCLUDE_AUDIT);
stepList.add(exsiccatumAdder);
-
+
//add primary collector
stepName = "Add primary collector to field unit";
ColumnAdder primaryCollectorAdder = ColumnAdder.NewIntegerInstance(stepName, "SpecimenOrObservationBase", "primaryCollector_id", INCLUDE_AUDIT, false, "AgentBase");
stepList.add(primaryCollectorAdder);
-
+
//taxonomic tree -> classification
stepName = "Rename taxonomic tree to classification";
TableNameChanger tableNameChanger = TableNameChanger.NewInstance(stepName, "TaxonomicTree", "Classification", INCLUDE_AUDIT);
stepList.add(tableNameChanger);
-
+
//TaxonomicTree_Annotation -> classification_Annotation
stepName = "Rename TaxonomicTree_Annotation to Classification_Annotation";
tableNameChanger = TableNameChanger.NewInstance(stepName, "TaxonomicTree_Annotation", "Classification_Annotation", INCLUDE_AUDIT);
stepList.add(tableNameChanger);
-
+
stepName = "Rename taxonomicTree_id column in Classification_Annotation";
ColumnNameChanger columnNameChanger = ColumnNameChanger.NewIntegerInstance(stepName, "Classification_Annotation", "taxonomicTree_id", "classification_id", INCLUDE_AUDIT);
stepList.add(columnNameChanger);
-
-
+
+
//TaxonomicTree_Credit -> classification_Credit
stepName = "Rename TaxonomicTree_Credit to Classification_Credit";
tableNameChanger = TableNameChanger.NewInstance(stepName, "TaxonomicTree_Credit", "Classification_Credit", INCLUDE_AUDIT);
stepName = "Rename taxonomicTree_id column in Classification_Credit";
columnNameChanger = ColumnNameChanger.NewIntegerInstance(stepName, "Classification_Credit", "taxonomicTree_id", "classification_id", INCLUDE_AUDIT);
stepList.add(columnNameChanger);
-
-
+
+
//TaxonomicTree_Extension -> classification_Extension
stepName = "Rename TaxonomicTree_Extension to Classification_Extension";
tableNameChanger = TableNameChanger.NewInstance(stepName, "TaxonomicTree_Extension", "Classification_Extension", INCLUDE_AUDIT);
columnNameChanger = ColumnNameChanger.NewIntegerInstance(stepName, "Classification_Extension", "taxonomicTree_id", "classification_id", INCLUDE_AUDIT);
stepList.add(columnNameChanger);
-
+
//TaxonomicTree_Marker -> classification_Marker
stepName = "Rename TaxonomicTree_Marker to Classification_Marker";
tableNameChanger = TableNameChanger.NewInstance(stepName, "TaxonomicTree_Marker", "Classification_Marker", INCLUDE_AUDIT);
columnNameChanger = ColumnNameChanger.NewIntegerInstance(stepName, "Classification_Marker", "taxonomicTree_id", "classification_id", INCLUDE_AUDIT);
stepList.add(columnNameChanger);
-
+
//TaxonomicTree_OriginalSourceBase -> classification_OriginalSourceBase
stepName = "Rename TaxonomicTree_OriginalSourceBase to Classification_OriginalSourceBase";
tableNameChanger = TableNameChanger.NewInstance(stepName, "TaxonomicTree_OriginalSourceBase", "Classification_OriginalSourceBase", INCLUDE_AUDIT);
columnNameChanger = ColumnNameChanger.NewIntegerInstance(stepName, "Classification_OriginalSourceBase", "taxonomicTree_id", "classification_id", INCLUDE_AUDIT);
stepList.add(columnNameChanger);
-
+
//TaxonomicTree_Rights -> classification_Rights
stepName = "Rename TaxonomicTree_Rights to Classification_Rights";
tableNameChanger = TableNameChanger.NewInstance(stepName, "TaxonomicTree_Rights", "Classification_Rights", INCLUDE_AUDIT);
columnNameChanger = ColumnNameChanger.NewIntegerInstance(stepName, "Classification_Rights", "taxonomicTree_id", "classification_id", INCLUDE_AUDIT);
stepList.add(columnNameChanger);
-
+
//TaxonomicTree_TaxonNode -> classification_TaxonNode
stepName = "Rename TaxonomicTree_TaxonNode to Classification_TaxonNode";
tableNameChanger = TableNameChanger.NewInstance(stepName, "TaxonomicTree_TaxonNode", "Classification_TaxonNode", INCLUDE_AUDIT);
stepName = "Rename description column in SpecimenOrObservationBase_LanguageString";
columnNameChanger = ColumnNameChanger.NewIntegerInstance(stepName, "SpecimenOrObservationBase_LanguageString", "description_mapkey_id", "definition_mapkey_id", INCLUDE_AUDIT);
stepList.add(columnNameChanger);
-
+
//Rename derivationevent_id column in SpecimenOrObservationBase
stepName = "Rename derivationevent_id column in SpecimenOrObservationBase";
columnNameChanger = ColumnNameChanger.NewIntegerInstance(stepName, "SpecimenOrObservationBase", "derivationevent_id", "derivedfrom_id", INCLUDE_AUDIT);
stepName = "Rename taxon_fk column in MediaKey_Taxon";
columnNameChanger = ColumnNameChanger.NewIntegerInstance(stepName, "MediaKey_Taxon", "taxon_fk", "taxon_id", INCLUDE_AUDIT);
stepList.add(columnNameChanger);
-
+
//Rename multiAccessKey_fk column in MultiAccessKey_Taxon
stepName = "Rename multiAccessKey_fk column in MultiAccessKey_Taxon";
stepName = "Rename taxon_fk column in MultiAccessKey_Taxon";
columnNameChanger = ColumnNameChanger.NewIntegerInstance(stepName, "MultiAccessKey_Taxon", "taxon_fk", "taxon_id", INCLUDE_AUDIT);
stepList.add(columnNameChanger);
-
+
//add the table hibernate_sequences
stepName = "Add the table hibernate_sequences to store the table specific sequences in";
SequenceTableCreator step = SequenceTableCreator.NewInstance(stepName);
stepList.add(step);
-
+
return stepList;
}
!INCLUDE_AUDIT, false);
stepPref.setPrimaryKeyParams("key_subject, key_predicate", null);
stepList.add(stepPref);
-
+
// update RightsTerm to RightsType #1306
stepName = "Update RightsTerm -> RightsType";
String updateSql = "UPDATE @@DefinedTermBase@@ SET DTYPE = 'RightsType' WHERE DTYPE = 'RightsTerm'";
String firstTable = "Amplification";
String secondTable = "SingleRead";
step = MnTableCreator
- .NewMnInstance(stepName, firstTable, null, secondTable, null,
- SchemaUpdaterBase.INCLUDE_AUDIT, false, true);
+ .NewMnInstance(stepName, firstTable, null, secondTable, null, null,
+ SchemaUpdaterBase.INCLUDE_AUDIT, !IS_LIST, IS_1_TO_M);
stepList.add(step);
// sequence - single reads #3360
firstTable = "Sequence";
secondTable = "SingleRead";
step = MnTableCreator
- .NewMnInstance(stepName, firstTable, null, secondTable, null,
- SchemaUpdaterBase.INCLUDE_AUDIT, false, true);
+ .NewMnInstance(stepName, firstTable, null, secondTable, null, null,
+ SchemaUpdaterBase.INCLUDE_AUDIT, !IS_LIST, IS_1_TO_M);
stepList.add(step);
// sequence - barcode #3360
stepName = "Add identityCache index";
tableName = "SpecimenOrObservationBase";
newColumnName = "identityCache";
- step = IndexAdder.NewInstance(stepName, tableName, newColumnName, null);
+ step = IndexAdder.NewStringInstance(stepName, tableName, newColumnName, null);
stepList.add(step);
stepName = "Add protectedIdentityCache";
String stepName;
String tableName;
ISchemaUpdaterStep step;
- String query;
String newColumnName;
- String oldColumnName;
List<ISchemaUpdaterStep> stepList = new ArrayList<>();
//subtree filter
stepName= "Add geo filter MN table to WorkingSet";
String firstTableName = "WorkingSet";
- String secondTableName = "NamedArea";
- String secondTableAlias = "geoFilter";
- boolean hasSortIndex = false;
- boolean secondTableInKey = true;
- step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, secondTableAlias, INCLUDE_AUDIT, hasSortIndex, secondTableInKey);
+ String secondTableAlias = "NamedArea";
+ String secondTableName = "DefinedTermBase";
+ String attributeName = "geoFilter";
+ boolean isList = ! IS_LIST;
+ step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, secondTableAlias, attributeName, INCLUDE_AUDIT, isList, IS_M_TO_M);
stepList.add(step);
//subtree filter
stepName= "Add subtree filter MN table to WorkingSet";
firstTableName = "WorkingSet";
secondTableName = "TaxonNode";
- secondTableAlias = "taxonSubtreeFilter";
- hasSortIndex = false;
- secondTableInKey = true;
- step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, secondTableAlias, INCLUDE_AUDIT, hasSortIndex, secondTableInKey);
+ secondTableAlias = null;
+ attributeName = "taxonSubtreeFilter";
+ isList = ! IS_LIST;
+ step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, secondTableAlias, attributeName, INCLUDE_AUDIT, isList, IS_M_TO_M);
stepList.add(step);
//#6258
stepName= "Add blockedBy_id to Registration";
firstTableName = "Registration";
secondTableName = "Registration";
- secondTableAlias = "blockedBy";
- hasSortIndex = false;
- secondTableInKey = true;
- step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, secondTableAlias, INCLUDE_AUDIT, hasSortIndex, secondTableInKey);
+ attributeName = "blockedBy";
+ isList = ! IS_LIST;
+ step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, null, attributeName, INCLUDE_AUDIT, isList, IS_M_TO_M);
stepList.add(step);
//add type designations
stepName= "Add type designations to Registration";
firstTableName = "Registration";
secondTableName = "TypeDesignationBase";
- secondTableAlias = "typeDesignations";
- hasSortIndex = false;
- secondTableInKey = true;
- step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, secondTableAlias, INCLUDE_AUDIT, hasSortIndex, secondTableInKey);
+ attributeName = "typeDesignations";
+ isList = false;
+ step = MnTableCreator.NewMnInstance(stepName, firstTableName, null, secondTableName, null, attributeName, INCLUDE_AUDIT, isList, IS_M_TO_M);
stepList.add(step);
//#5258
step = ColumnAdder.NewDateTimeInstance(stepName, tableName, newColumnName, INCLUDE_AUDIT, !NOT_NULL);
stepList.add(step);
+ //#6535 update termtype for CdmMetaData (int => string)
+
+ //ModelUpdateResult
+
+ //Remove termupdater and allow update only from version 4.0
+
+
+
+
return stepList;
}
private void testSelectedDb(){
- DbSchemaValidation schema = DbSchemaValidation.CREATE;
+ DbSchemaValidation schema = DbSchemaValidation.VALIDATE;
DatabaseTypeEnum dbType = DatabaseTypeEnum.MySQL;