ref #6343, ref 6794 fix creation of OrderedTermVocabulary in imports
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / update / v515_518 / RecommendedMeasurementUnitAdder.java
1 /**
2 * Copyright (C) 2020 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.v515_518;
10
11 import java.sql.SQLException;
12 import java.util.ArrayList;
13 import java.util.List;
14 import java.util.UUID;
15
16 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
17 import eu.etaxonomy.cdm.database.ICdmDataSource;
18 import eu.etaxonomy.cdm.database.update.CaseType;
19 import eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep;
20 import eu.etaxonomy.cdm.database.update.SchemaUpdateResult;
21 import eu.etaxonomy.cdm.database.update.SchemaUpdaterStepBase;
22
23 /**
24 * @author a.mueller
25 * @since 12.06.2020
26 */
27 public class RecommendedMeasurementUnitAdder extends SchemaUpdaterStepBase {
28
29 private final UUID uuidFeature;
30 private final UUID uuidUnit;
31
32 public static final RecommendedMeasurementUnitAdder NewInstance(List<ISchemaUpdaterStep> stepList,
33 String stepName, UUID uuidFeature, UUID uuidUnit){
34 RecommendedMeasurementUnitAdder result = new RecommendedMeasurementUnitAdder(
35 stepList, stepName, uuidFeature, uuidUnit);
36 return result;
37 }
38
39 protected RecommendedMeasurementUnitAdder(List<ISchemaUpdaterStep> stepList, String stepName, UUID uuidFeature, UUID uuidUnit) {
40 super(stepList, stepName);
41 this.uuidFeature = uuidFeature;
42 this.uuidUnit = uuidUnit;
43 }
44
45 @Override
46 public List<ISchemaUpdaterStep> getInnerSteps() {
47 List<ISchemaUpdaterStep> result = new ArrayList<>();
48 return result;
49 }
50
51 @Override
52 public void invoke(ICdmDataSource datasource, IProgressMonitor monitor, CaseType caseType,
53 SchemaUpdateResult result) throws SQLException {
54
55 boolean includeAudit = true;
56
57 //find IDs
58 String sql = "SELECT id "
59 + " FROM "+caseType.transformTo("DefinedTermBase")+" t "
60 + " WHERE t.uuid = '"+uuidFeature+"'";
61 Integer idFeature = (Integer)datasource.getSingleValue(sql);
62 if (idFeature == null){
63 return;
64 }
65
66 sql = "SELECT id "
67 + " FROM "+caseType.transformTo("DefinedTermBase")+" smv "
68 + " WHERE smv.uuid = '"+uuidUnit+"'";
69 Integer idUnit = (Integer)datasource.getSingleValue(sql);
70
71 sql = "SELECT count(*) "
72 + "FROM @@DefinedTermBase_MeasurementUnit@@ "
73 + " WHERE Feature_id = "+idFeature+" AND recommendedMeasurementUnits_id = " + idUnit;
74 Long count = (Long)datasource.getSingleValue(caseType.replaceTableNames(sql));
75 if (count > 0){
76 return;
77 }
78
79 //insert records
80 sql = "INSERT INTO @@DefinedTermBase_MeasurementUnit@@ (Feature_id, recommendedMeasurementUnits_id)"
81 + " VALUES (" + idFeature + "," + idUnit + ")";
82 datasource.executeUpdate(caseType.replaceTableNames(sql));
83
84 if (includeAudit){
85 Integer rev;
86 try {
87 sql = "SELECT MAX(REV) "
88 + " FROM "+caseType.transformTo("DefinedTermBase_AUD")+" t "
89 + " WHERE t.uuid = '"+uuidFeature+"'";
90 rev = (Integer)datasource.getSingleValue(sql);
91 } catch (Exception e) {
92 //TODO we could also create a new AUDIT event
93 result.addWarning("Revision number for adding measurement unit to feature could not be defined. Adding is not audited.", this, "");
94 includeAudit = false;
95 return;
96 }
97 sql = "INSERT INTO @@DefinedTermBase_MeasurementUnit_AUD@@ (REV, Feature_id, recommendedMeasurementUnits_id, REVTYPE)"
98 + " VALUES ("+rev+"," + idFeature + "," + idUnit + ","+0+")";
99 datasource.executeUpdate(caseType.replaceTableNames(sql));
100 }
101 }
102 }