include more auditing in schema update and refactor to better allow transaction suppo...
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / update / v31_33 / RankClassUpdater.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.v31_33;
11
12 import java.sql.ResultSet;
13 import java.sql.SQLException;
14
15 import org.apache.log4j.Logger;
16
17 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
18 import eu.etaxonomy.cdm.database.ICdmDataSource;
19 import eu.etaxonomy.cdm.database.update.ITermUpdaterStep;
20 import eu.etaxonomy.cdm.database.update.SchemaUpdaterStepBase;
21 import eu.etaxonomy.cdm.model.name.Rank;
22 import eu.etaxonomy.cdm.model.name.RankClass;
23
24 /**
25 * @author a.mueller
26 * @date 15.12.2013
27 */
28 public class RankClassUpdater extends SchemaUpdaterStepBase<RankClassUpdater> implements ITermUpdaterStep{
29 @SuppressWarnings("unused")
30 private static final Logger logger = Logger.getLogger(RankClassUpdater.class);
31
32 private static final String stepName = "Update rank class values";
33
34 // **************************** STATIC METHODS ********************************/
35
36 public static final RankClassUpdater NewInstance(){
37 return new RankClassUpdater(stepName);
38 }
39
40 protected RankClassUpdater(String stepName) {
41 super(stepName);
42 }
43
44 @Override
45 public Integer invoke(ICdmDataSource datasource, IProgressMonitor monitor) throws SQLException {
46
47 try {
48 //update representation label
49 String sql;
50 sql = " SELECT orderindex FROM DefinedTermBase WHERE uuid = '%s'";
51 Integer genusOrderIndex = (Integer)datasource.getSingleValue(String.format(sql, Rank.uuidGenus));
52 Integer infraGenericOrderIndex = (Integer)datasource.getSingleValue(String.format(sql, Rank.uuidInfragenericTaxon));
53 Integer speciesOrderIndex = (Integer)datasource.getSingleValue(String.format(sql, Rank.uuidSpecies));
54
55 //suprageneric
56 sql = " UPDATE DefinedTermBase dtb " +
57 " SET dtb.rankClass = '%s' " +
58 " WHERE dtb.DTYPE = 'Rank' AND dtb.orderindex < %d";
59 datasource.executeUpdate(String.format(sql, RankClass.Suprageneric.getKey(), genusOrderIndex));
60
61
62 //genus
63 sql = " UPDATE DefinedTermBase dtb " +
64 " SET dtb.rankClass = '%s' " +
65 " WHERE dtb.DTYPE = 'Rank' AND dtb.orderindex = %d";
66 datasource.executeUpdate(String.format(sql, RankClass.Genus.getKey(), genusOrderIndex));
67
68 //infrageneric
69 sql = " UPDATE DefinedTermBase dtb " +
70 " SET dtb.rankClass = '%s' " +
71 " WHERE dtb.DTYPE = 'Rank' AND dtb.orderindex > %d AND dtb.orderindex <= %d";
72 datasource.executeUpdate(String.format(sql, RankClass.Infrageneric.getKey(), genusOrderIndex, infraGenericOrderIndex));
73
74 //species group
75 sql = " UPDATE DefinedTermBase dtb " +
76 " SET dtb.rankClass = '%s' " +
77 " WHERE dtb.DTYPE = 'Rank' AND dtb.orderindex > %d AND dtb.orderindex < %d";
78 datasource.executeUpdate(String.format(sql, RankClass.SpeciesGroup.getKey(), infraGenericOrderIndex, speciesOrderIndex));
79
80 //species
81 sql = " UPDATE DefinedTermBase dtb " +
82 " SET dtb.rankClass = '%s' " +
83 " WHERE dtb.DTYPE = 'Rank' AND dtb.orderindex = %d";
84 datasource.executeUpdate(String.format(sql, RankClass.Species.getKey(), speciesOrderIndex));
85
86 //infraspecific
87 sql = " UPDATE DefinedTermBase dtb " +
88 " SET dtb.rankClass = '%s' " +
89 " WHERE dtb.DTYPE = 'Rank' AND dtb.orderindex > %d";
90 datasource.executeUpdate(String.format(sql, RankClass.Infraspecific.getKey(), speciesOrderIndex));
91
92
93 return 0;
94 } catch (Exception e) {
95 monitor.warning(e.getMessage(), e);
96 logger.warn(e.getMessage());
97 return null;
98 }
99 }
100
101
102 }