move progress monitoring into subpackage
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / update / SchemaUpdaterStepBase.java
1 // $Id$
2 /**
3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10 package eu.etaxonomy.cdm.database.update;
11
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;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.apache.log4j.Logger;
20
21 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
22 import eu.etaxonomy.cdm.database.DatabaseTypeEnum;
23 import eu.etaxonomy.cdm.database.ICdmDataSource;
24 import eu.etaxonomy.cdm.model.common.Language;
25
26 /**
27 * @author a.mueller
28 * @date 13.09.2010
29 *
30 */
31 public abstract class SchemaUpdaterStepBase<T extends SchemaUpdaterStepBase<T>> implements ISchemaUpdaterStep {
32 private static final Logger logger = Logger.getLogger(SchemaUpdaterStepBase.class);
33
34 protected String stepName;
35
36
37 //************************ CONSTRUCTOR ***********************************/
38
39 protected SchemaUpdaterStepBase(String stepName){
40 this.setStepName(stepName);
41 }
42
43 /* (non-Javadoc)
44 * @see eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep#invoke(eu.etaxonomy.cdm.database.ICdmDataSource, eu.etaxonomy.cdm.common.IProgressMonitor)
45 */
46 public abstract Integer invoke (ICdmDataSource datasource, IProgressMonitor monitor) throws SQLException;
47
48 /* (non-Javadoc)
49 * @see eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep#setStepName(java.lang.String)
50 */
51 public void setStepName(String stepName) {
52 this.stepName = stepName;
53 }
54
55 /* (non-Javadoc)
56 * @see eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep#getStepName()
57 */
58 public String getStepName() {
59 return stepName;
60 }
61
62
63
64 protected String getBoolean(boolean value, ICdmDataSource datasource) {
65 String result;
66 DatabaseTypeEnum type = datasource.getDatabaseType();
67 int intValue = value == true? 1 : 0;
68 if (type.equals(DatabaseTypeEnum.MySQL)){
69 result = "b'"+intValue+"'";
70 }else if (type.equals(DatabaseTypeEnum.PostgreSQL)){
71 result = "'"+intValue+"'";
72 }else if (type.equals(DatabaseTypeEnum.H2)){
73 result = value == true ? "TRUE" : "FALSE";
74 }else if (type.equals(DatabaseTypeEnum.SqlServer2005)){
75 logger.warn("SQLServer boolean not tested yet");
76 result = "b'"+intValue+"'";
77 }else{
78 throw new RuntimeException("Database type not supported for boolean" + type.getName());
79 }
80 return result;
81 }
82
83 protected Integer getEnglishLanguageId(ICdmDataSource datasource, IProgressMonitor monitor) throws SQLException {
84 return getLanguageId(Language.uuidEnglish, datasource, monitor);
85 }
86
87 /**
88 * @param uuidLanguage
89 * @param datasource
90 * @param monitor
91 * @return
92 * @throws SQLException
93 */
94 protected Integer getLanguageId(UUID uuidLanguage, ICdmDataSource datasource, IProgressMonitor monitor) throws SQLException {
95 ResultSet rs;
96 Integer langId = null;
97 String sqlLangId = " SELECT id FROM DefinedTermBase WHERE uuid = '" + uuidLanguage + "'";
98 rs = datasource.executeQuery(sqlLangId);
99 if (rs.next()){
100 langId = rs.getInt("id");
101 }else{
102 String warning = "Term for language (" + uuidLanguage + ") does not exist!";
103 monitor.warning(warning);
104 }
105 return langId;
106 }
107
108
109 public List<ISchemaUpdaterStep> getInnerSteps(){
110 return new ArrayList<ISchemaUpdaterStep>();
111 }
112
113 @Override
114 public String toString(){
115 if (StringUtils.isNotBlank(stepName)){
116 return stepName;
117 }else{
118 return super.toString();
119 }
120 }
121
122 }