Author: bleny Date: 2011-03-09 14:24:18 +0000 (Wed, 09 Mar 2011) New Revision: 1056 Log: add UO when importing terrestrial divisions ; update sampling plan import Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java trunk/wao-business/src/main/xmi/wao.zargo Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-03-08 16:18:29 UTC (rev 1055) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-03-09 14:24:18 UTC (rev 1056) @@ -806,7 +806,7 @@ "observationUnitCode CHARACTER VARYING(255)," + "observationUnitName CHARACTER VARYING(255)," + "regionIfremerCode CHARACTER VARYING(255)," + - "port CHARACTER VARYING(255) NOT NULL," + + "port CHARACTER VARYING(255)," + "CONSTRAINT port_fkey FOREIGN KEY (port) " + "REFERENCES TerrestrialLocation (topiaid));"); } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java 2011-03-08 16:18:29 UTC (rev 1055) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java 2011-03-09 14:24:18 UTC (rev 1056) @@ -1,11 +1,21 @@ package fr.ifremer.wao.entity; -public class TerrestrialDivisionImpl extends TerrestrialDivisionAbstract { +public class TerrestrialDivisionImpl extends TerrestrialDivisionAbstract { @Override + public boolean isObservationUnit() { + return getCode() == null && getPort() == null; + } + + @Override public String toString() { - String toString = getObservationUnitCode() + " - " + getObservationUnitName(); - toString += "||" + getPort().getPortName(); + String toString; + if (isObservationUnit()) { + toString = getRegionIfremerCode() + "-" + getObservationUnitCode() + + " " + getObservationUnitName(); + } else { + toString = getPort().getPortName(); + } return toString; } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java 2011-03-08 16:18:29 UTC (rev 1055) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java 2011-03-09 14:24:18 UTC (rev 1056) @@ -93,23 +93,23 @@ } /** region ifremer code -> UO code -> TerrestrialDivision */ - protected Map<String, Map<String, TerrestrialDivision>> observationUnits; + protected Map<String, Map<String, TerrestrialDivision>> indexedObservationUnits; - public SamplingPlanImportModel(List<TerrestrialDivision> terrestrialDivisions) { + public SamplingPlanImportModel(List<TerrestrialDivision> observationUnits) { - observationUnits = new HashMap<String, Map<String, TerrestrialDivision>>(); - for (TerrestrialDivision terrestrialDivision : terrestrialDivisions) { + indexedObservationUnits = new HashMap<String, Map<String, TerrestrialDivision>>(); + for (TerrestrialDivision terrestrialDivision : observationUnits) { String regionCode = terrestrialDivision.getRegionIfremerCode(); - Map<String, TerrestrialDivision> unitCodesToDivision = observationUnits.get(regionCode); + Map<String, TerrestrialDivision> unitCodesToDivision = indexedObservationUnits.get(regionCode); if (unitCodesToDivision == null) { unitCodesToDivision = new HashMap<String, TerrestrialDivision>(); } unitCodesToDivision.put(terrestrialDivision.getObservationUnitCode(), terrestrialDivision); - observationUnits.put(regionCode, unitCodesToDivision); + indexedObservationUnits.put(regionCode, unitCodesToDivision); } if (log.isDebugEnabled()) { - for (Map.Entry<String, Map<String, TerrestrialDivision>> entry : observationUnits.entrySet()) { + for (Map.Entry<String, Map<String, TerrestrialDivision>> entry : indexedObservationUnits.entrySet()) { log.debug(entry.getKey()); for (Map.Entry<String, TerrestrialDivision> unitCodesToDivision : entry.getValue().entrySet()) { log.debug(" -> " + unitCodesToDivision.getKey() + " -> " + unitCodesToDivision.getValue()); @@ -148,7 +148,7 @@ SampleRow.PROPERTY_CODE)); columns.add(ImportableColumnImpl.newMandatoryColumn("OBSERVATEUR_COD", SampleRow.PROPERTY_GROUP_NAME)); columns.add(ImportableColumnImpl.newMandatoryColumn("OBSERVATION_DATE", Common.DAY_PARSER, SampleRow.PROPERTY_DAY)); - ObservationUnitParser observationUnitParser = new ObservationUnitParser(observationUnits); + ObservationUnitParser observationUnitParser = new ObservationUnitParser(indexedObservationUnits); ValueSetter<SampleRow, String> regionCodeSetter = new RegionCodeSetter(observationUnitParser); columns.add(ImportableColumnImpl.<SampleRow> newMandatoryColumn("REGION_IFREMER_COD", regionCodeSetter)); columns.add(ImportableColumnImpl.newMandatoryColumn("UNITE_OBSERVATION_COD", observationUnitParser, SampleRow.PROPERTY_OBSERVATION_UNIT)); Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-03-08 16:18:29 UTC (rev 1055) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-03-09 14:24:18 UTC (rev 1056) @@ -25,6 +25,7 @@ package fr.ifremer.wao.service; import com.csvreader.CsvReader; +import fr.ifremer.wao.WaoBinderHelper; import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoContext; import fr.ifremer.wao.WaoDAOHelper; @@ -614,7 +615,23 @@ try { Iterator<TerrestrialDivision> terrestrialDivisionIterator = terrestrialDivisionImport.startImport(); - WaoUtils.createOrUpdate(TerrestrialDivision.class, terrestrialDivisionIterator, dao, TerrestrialDivision.PROPERTY_CODE); + Binder<TerrestrialDivision, TerrestrialDivision> observationUnitBinder = BinderFactory.newBinder(TerrestrialDivision.class); + + while (terrestrialDivisionIterator.hasNext()) { + TerrestrialDivision terrestrialDivision = terrestrialDivisionIterator.next(); + WaoUtils.createOrUpdate(TerrestrialDivision.class, terrestrialDivision, dao, TerrestrialDivision.PROPERTY_CODE); + + // now add an observation unit + TerrestrialDivision observationUnit = dao.newInstance(); + observationUnitBinder.copyExcluding(terrestrialDivision, observationUnit, + TerrestrialDivision.TOPIA_ID, TerrestrialDivision.TOPIA_VERSION, TerrestrialDivision.TOPIA_CREATE_DATE, + TerrestrialDivision.PROPERTY_CODE, TerrestrialDivision.PROPERTY_PORT); + WaoUtils.createOrUpdate(TerrestrialDivision.class, observationUnit, dao, TerrestrialDivision.PROPERTY_CODE, + TerrestrialDivision.PROPERTY_SKILL_ZONE_CODE, TerrestrialDivision.PROPERTY_SUB_POPULATION_CODE, + TerrestrialDivision.PROPERTY_OBSERVATION_UNIT_CODE, TerrestrialDivision.PROPERTY_PORT); + } + + transaction.commitTransaction(); } catch (Exception e) { transaction.rollbackTransaction(); throw e; @@ -622,5 +639,9 @@ terrestrialDivisionImport.stopImport(); } + if (log.isDebugEnabled()) { + log.debug(dao.count() + " terrestrial divisions in database"); + } + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-08 16:18:29 UTC (rev 1055) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-09 14:24:18 UTC (rev 1056) @@ -79,6 +79,7 @@ import fr.ifremer.wao.io.csv.WaoCsvHeader.SAMPLING; import fr.ifremer.wao.io.csv2.Import; import fr.ifremer.wao.io.csv2.models.SamplingPlanImportModel; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.mail.EmailException; @@ -259,7 +260,31 @@ SampleRow oldRow = null; if (row.getCode() == null) { - String code = executeGetNewSampleRowCode(transaction, context.getCurrentDate()); + // all rows must have a unique code, the code has a year as prefix + // like '2011_' so we must know on which year the row is active + + // the date from which year will be extracted (whatever the day of the year) + Date year; + + if (ObsProgram.OBSDEB.equals(row.getObsProgram())) { + // this line has a precise day, let's take the + // year of this day + year = row.getDay(); + } else { + if (CollectionUtils.isEmpty(row.getSampleMonth())) { + // if the row has no sample months, we can't know + // we take current year by default + year = context.getCurrentDate(); + } else { + // if the row has sample months, take the first month + year = row.getSampleMonth().get(0).getPeriodDate(); + } + } + + // now we have the year for prefix, let's get the whole new + // code (suffix depends on already used codes) + String code = executeGetNewSampleRowCode(transaction, year); + row.setCode(code); } else { oldRow = getSampleRowByCode(null, row.getCode()); @@ -272,16 +297,28 @@ } dao.create(row); } else { + + // it's the modification of a row, we must compute the + // difference between before and after add this to the + // sample row historic + + // first, compute the difference rowLog.setLogText(oldRow, row); + // update the row by copying the new data in the old entity + // taking care to not remove any sample row log entries Binder<SampleRow, SampleRow> sampleRowBinder = BinderFactory.newBinder(SampleRow.class); sampleRowBinder.copyExcluding(row, oldRow, SampleRow.TOPIA_ID, SampleRow.TOPIA_VERSION, SampleRow.TOPIA_CREATE_DATE, - SampleRow.PROPERTY_SAMPLE_ROW_LOG); + // old logs (whole historic) is kept by not erasing this property + SampleRow.PROPERTY_SAMPLE_ROW_LOG); if (rowLog.getTopiaId() == null) { context.prepareTopiaId(SampleRowLog.class, rowLog); } + + // attach the new log entry to the updated row row.addSampleRowLog(rowLog); + dao.update(oldRow); } @@ -1034,13 +1071,14 @@ ImportResults result = new ImportResultsImpl(); if (ObsProgram.OBSDEB.equals(obsProgram)) { TerrestrialDivisionDAO terrestrialDivisionDAO = WaoDAOHelper.getTerrestrialDivisionDAO(transaction); - List<TerrestrialDivision> terrestrialDivisions = terrestrialDivisionDAO.findAll(); - if (terrestrialDivisions.isEmpty()) { + List<TerrestrialDivision> observationUnits = terrestrialDivisionDAO.findAllByPort(null); + + if (observationUnits.isEmpty()) { throw new IllegalStateException("Le référentiel de stratification n'a pas été importé"); } - SamplingPlanImportModel samplingPlanImportModel = new SamplingPlanImportModel(terrestrialDivisions); + SamplingPlanImportModel samplingPlanImportModel = new SamplingPlanImportModel(observationUnits); try { Import<SampleRow> samplingPlanImport = new Import<SampleRow>(samplingPlanImportModel, input); Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ)