2 * Copyright (C) 2020 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.database
.update
.v515_518
;
11 import java
.sql
.SQLException
;
12 import java
.util
.ArrayList
;
13 import java
.util
.List
;
14 import java
.util
.UUID
;
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
;
27 public class RecommendedMeasurementUnitAdder
extends SchemaUpdaterStepBase
{
29 private final UUID uuidFeature
;
30 private final UUID uuidUnit
;
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
);
39 protected RecommendedMeasurementUnitAdder(List
<ISchemaUpdaterStep
> stepList
, String stepName
, UUID uuidFeature
, UUID uuidUnit
) {
40 super(stepList
, stepName
);
41 this.uuidFeature
= uuidFeature
;
42 this.uuidUnit
= uuidUnit
;
46 public List
<ISchemaUpdaterStep
> getInnerSteps() {
47 List
<ISchemaUpdaterStep
> result
= new ArrayList
<>();
52 public void invoke(ICdmDataSource datasource
, IProgressMonitor monitor
, CaseType caseType
,
53 SchemaUpdateResult result
) throws SQLException
{
55 boolean includeAudit
= true;
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){
67 + " FROM "+caseType
.transformTo("DefinedTermBase")+" smv "
68 + " WHERE smv.uuid = '"+uuidUnit
+"'";
69 Integer idUnit
= (Integer
)datasource
.getSingleValue(sql
);
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
));
80 sql
= "INSERT INTO @@DefinedTermBase_MeasurementUnit@@ (Feature_id, recommendedMeasurementUnits_id)"
81 + " VALUES (" + idFeature
+ "," + idUnit
+ ")";
82 datasource
.executeUpdate(caseType
.replaceTableNames(sql
));
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, "");
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
));