3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.database
.update
;
12 import java
.sql
.ResultSet
;
13 import java
.sql
.SQLException
;
14 import java
.util
.ArrayList
;
15 import java
.util
.List
;
16 import java
.util
.UUID
;
18 import org
.apache
.commons
.lang
.StringUtils
;
19 import org
.apache
.log4j
.Logger
;
20 import org
.joda
.time
.DateTime
;
22 import eu
.etaxonomy
.cdm
.common
.monitor
.IProgressMonitor
;
23 import eu
.etaxonomy
.cdm
.database
.DatabaseTypeEnum
;
24 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
25 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
32 public abstract class SchemaUpdaterStepBase
<T
extends SchemaUpdaterStepBase
<T
>> implements ISchemaUpdaterStep
{
33 private static final Logger logger
= Logger
.getLogger(SchemaUpdaterStepBase
.class);
35 protected String stepName
;
37 private boolean ignoreErrors
;
40 //************************ CONSTRUCTOR ***********************************/
42 protected SchemaUpdaterStepBase(String stepName
){
43 this.setStepName(stepName
);
47 * @see eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep#invoke(eu.etaxonomy.cdm.database.ICdmDataSource, eu.etaxonomy.cdm.common.IProgressMonitor)
49 public abstract Integer
invoke (ICdmDataSource datasource
, IProgressMonitor monitor
) throws SQLException
;
52 * @see eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep#setStepName(java.lang.String)
54 public void setStepName(String stepName
) {
55 this.stepName
= stepName
;
59 * @see eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep#getStepName()
61 public String
getStepName() {
67 protected String
getBoolean(boolean value
, ICdmDataSource datasource
) {
69 DatabaseTypeEnum type
= datasource
.getDatabaseType();
70 int intValue
= value
== true?
1 : 0;
71 if (type
.equals(DatabaseTypeEnum
.MySQL
)){
72 result
= "b'"+intValue
+"'";
73 }else if (type
.equals(DatabaseTypeEnum
.PostgreSQL
)){
74 result
= "'"+intValue
+"'";
75 }else if (type
.equals(DatabaseTypeEnum
.H2
)){
76 result
= value
== true ?
"TRUE" : "FALSE";
77 }else if (type
.equals(DatabaseTypeEnum
.SqlServer2005
)){
78 logger
.warn("SQLServer boolean not tested yet");
79 result
= "b'"+intValue
+"'";
81 throw new RuntimeException("Database type not supported for boolean" + type
.getName());
86 protected Integer
getEnglishLanguageId(ICdmDataSource datasource
, IProgressMonitor monitor
) throws SQLException
{
87 return getLanguageId(Language
.uuidEnglish
, datasource
, monitor
);
95 * @throws SQLException
97 protected Integer
getLanguageId(UUID uuidLanguage
, ICdmDataSource datasource
, IProgressMonitor monitor
) throws SQLException
{
99 Integer langId
= null;
100 String sqlLangId
= " SELECT id FROM DefinedTermBase WHERE uuid = '" + uuidLanguage
+ "'";
101 rs
= datasource
.executeQuery(sqlLangId
);
103 langId
= rs
.getInt("id");
105 String warning
= "Term for language (" + uuidLanguage
+ ") does not exist!";
106 monitor
.warning(warning
);
112 public List
<ISchemaUpdaterStep
> getInnerSteps(){
113 return new ArrayList
<ISchemaUpdaterStep
>();
117 public boolean isIgnoreErrors() {
123 public void setIgnoreErrors(boolean ignoreErrors
) {
124 this.ignoreErrors
= ignoreErrors
;
129 * Returns a time string with date and time (without millis) that
130 * can be used as a time string for database insert and update
133 protected String
getNowString() {
134 return DateTime
.now().toString("YYYY-MM-dd HH:mm:ss");
138 public String
toString(){
139 if (StringUtils
.isNotBlank(stepName
)){
142 return super.toString();