01/04: Ajout Species.sizeMeatureType + suppresion Species.lengthMeasureType (persistence)
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 9ac4f430ce124c64d7c97a9cf471a26d6e909efe Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Nov 2 15:30:07 2016 +0100 Ajout Species.sizeMeatureType + suppresion Species.lengthMeasureType (persistence) --- .../DataSourceMigrationForVersion_5_1.java | 99 +++++++++++++++++++-- ...10_evol_8391_species_add_sizeMeasureType-H2.sql | 2 + ...10_evol_8391_species_add_sizeMeasureType-PG.sql | 2 + entities/src/main/xmi/observe-common.zargo | Bin 37986 -> 38441 bytes 4 files changed, 94 insertions(+), 9 deletions(-) diff --git a/entities-migration/src/main/java/fr/ird/observe/entities/migration/versions/DataSourceMigrationForVersion_5_1.java b/entities-migration/src/main/java/fr/ird/observe/entities/migration/versions/DataSourceMigrationForVersion_5_1.java index ab82bfb..8945897 100644 --- a/entities-migration/src/main/java/fr/ird/observe/entities/migration/versions/DataSourceMigrationForVersion_5_1.java +++ b/entities-migration/src/main/java/fr/ird/observe/entities/migration/versions/DataSourceMigrationForVersion_5_1.java @@ -1,10 +1,15 @@ package fr.ird.observe.entities.migration.versions; +import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; import fr.ird.observe.entities.migration.AbstractDataSourceMigration; import fr.ird.observe.entities.migration.AbstractObserveMigrationCallBack; import fr.ird.observe.entities.migration.H2DataSourceMigration; import fr.ird.observe.entities.migration.ObserveMigrationConfigurationProviderImpl; import fr.ird.observe.entities.migration.PGDataSourceMigration; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.support.TopiaSqlQuery; import org.nuiton.topia.persistence.support.TopiaSqlSupport; @@ -12,7 +17,9 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; /** * Created on 27/10/16. @@ -22,6 +29,9 @@ import java.util.List; */ public class DataSourceMigrationForVersion_5_1 extends AbstractObserveMigrationCallBack { + /** Logger */ + private static final Log log = LogFactory.getLog(DataSourceMigrationForVersion_5_1.class); + public DataSourceMigrationForVersion_5_1(AbstractDataSourceMigration callBack, String scriptSuffix) { super(ObserveMigrationConfigurationProviderImpl.ObserveMigrationVersions.V_5_1.getVersion(), callBack, scriptSuffix); } @@ -32,16 +42,87 @@ public class DataSourceMigrationForVersion_5_1 extends AbstractObserveMigrationC boolean showSql, boolean showProgression) { - addScript("01", "evol_8374_delete_sonarUsed", queries); - addScript("02", "evol_7886_catch_add_set_idx", queries); - addScript("03", "evol_6997_delete_supportVesselName", queries); - addScript("04", "evol_6832_branchlineComposition_add_tracelineLength", queries); - addScript("05", "evol_6999_nonTargetCatch_add_well", queries); - addScript("06", "evol_8375_setSeine_add_booleans", queries); - addScript("07", "evol_8389_rename_source_columns", queries); - addScript("08", "evol_8390_measure_type", queries); - addScript("09", "evol_7877_targetLength_add_sex", queries); +// addScript("01", "evol_8374_delete_sonarUsed", queries); +// addScript("02", "evol_7886_catch_add_set_idx", queries); +// addScript("03", "evol_6997_delete_supportVesselName", queries); +// addScript("04", "evol_6832_branchlineComposition_add_tracelineLength", queries); +// addScript("05", "evol_6999_nonTargetCatch_add_well", queries); +// addScript("06", "evol_8375_setSeine_add_booleans", queries); +// addScript("07", "evol_8389_rename_source_columns", queries); +// addScript("08", "evol_8390_measure_type", queries); +// addScript("09", "evol_7877_targetLength_add_sex", queries); +// evol7877(topiaSqlSupport, queries); + addScript("10", "evol_8391_species_add_sizeMeasureType", queries); + evol8391(topiaSqlSupport, queries); + } + + private void evol8391(TopiaSqlSupport topiaSqlSupport, List<String> queries) { + + ImmutableMap<String,String> missingCodesMapping = ImmutableMap.<String,String>builder() + . put("LT ?","TL") +// . put("TL","TL") +// .put("LF","LF") + .put("FL","LF") + .put("L1","TL") + .put("LC","TL") + .put("LT","TL") + .build(); + List<String> lengthMeasureTypes = topiaSqlSupport.findMultipleResult(new TopiaSqlQuery<String>() { + + @Override + public PreparedStatement prepareQuery(Connection connection) throws SQLException { + return connection.prepareStatement("SELECT DISTINCT(lengthmeasuretype) FROM observe_common.species WHERE lengthmeasuretype IS NOT NULL"); + } + + @Override + public String prepareResult(ResultSet set) throws SQLException { + return set.getString(1); + } + }); + + Set<String> invalidCodes = new LinkedHashSet<>(); + for (String lengthMeasureType : lengthMeasureTypes) { + + lengthMeasureType = lengthMeasureType.trim(); + if (missingCodesMapping.containsKey(lengthMeasureType)) { + lengthMeasureType = missingCodesMapping.get(lengthMeasureType); + } + + String finalLengthMeasureType = lengthMeasureType; + String sizeMeasureTypeId = topiaSqlSupport.findSingleResult(new TopiaSqlQuery<String>() { + + @Override + public PreparedStatement prepareQuery(Connection connection) throws SQLException { + PreparedStatement preparedStatement = connection.prepareStatement("SELECT topiaId FROM observe_common.sizeMeasureType WHERE code = '"+ finalLengthMeasureType +"'"); + return preparedStatement; + } + + @Override + public String prepareResult(ResultSet set) throws SQLException { + return set.getString(1); + } + }); + + if (sizeMeasureTypeId == null) { + if (log.isWarnEnabled()) { + log.warn("Impossible de trouver la type de mesure de taille pour le code: " + lengthMeasureType); + } + invalidCodes.add(lengthMeasureType); + } else { + queries.add(String.format("UPDATE observe_common.species SET sizeMeasureType = '%s' WHERE lengthMeasureType = '%s'", sizeMeasureTypeId, lengthMeasureType)); + } + } + + if (!invalidCodes.isEmpty()) { + + throw new IllegalStateException("Impossible de trouver la type de mesure de taille pour les codes suivants :\n\t" + Joiner.on("\n\t").join(invalidCodes)); + } + + queries.add("ALTER TABLE observe_common.species DROP COLUMN lengthmeasuretype;"); + + } + private void evol7877(TopiaSqlSupport topiaSqlSupport, List<String> queries) { { List<String> oldIds = topiaSqlSupport.findMultipleResult(new TopiaSqlQuery<String>() { diff --git a/entities-migration/src/main/resources/db/migration/V5_1_10_evol_8391_species_add_sizeMeasureType-H2.sql b/entities-migration/src/main/resources/db/migration/V5_1_10_evol_8391_species_add_sizeMeasureType-H2.sql new file mode 100644 index 0000000..1ecc70a --- /dev/null +++ b/entities-migration/src/main/resources/db/migration/V5_1_10_evol_8391_species_add_sizeMeasureType-H2.sql @@ -0,0 +1,2 @@ +ALTER TABLE observe_common.species ADD COLUMN sizeMeasureType VARCHAR(255); +ALTER TABLE observe_common.species ADD CONSTRAINT FK_SPECIES_SIZE_MEASURE_TYPE FOREIGN KEY(sizeMeasureType) REFERENCES OBSERVE_COMMON.sizemeasuretype(topiaid); diff --git a/entities-migration/src/main/resources/db/migration/V5_1_10_evol_8391_species_add_sizeMeasureType-PG.sql b/entities-migration/src/main/resources/db/migration/V5_1_10_evol_8391_species_add_sizeMeasureType-PG.sql new file mode 100644 index 0000000..15bdd3e --- /dev/null +++ b/entities-migration/src/main/resources/db/migration/V5_1_10_evol_8391_species_add_sizeMeasureType-PG.sql @@ -0,0 +1,2 @@ +ALTER TABLE observe_common.species ADD COLUMN sizeMeasureType character varying(255); +ALTER TABLE observe_common.species ADD CONSTRAINT FK_SPECIES_SIZE_MEASURE_TYPE FOREIGN KEY(sizeMeasureType) REFERENCES OBSERVE_COMMON.sizemeasuretype(topiaid); diff --git a/entities/src/main/xmi/observe-common.zargo b/entities/src/main/xmi/observe-common.zargo index 94b7c59..395eb83 100644 Binary files a/entities/src/main/xmi/observe-common.zargo and b/entities/src/main/xmi/observe-common.zargo differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm