This is an automated email from the git hooks/post-receive script. New commit to branch feature/2263 in repository wao. See http://git.codelutin.com/wao.git commit f4a83c25404158e2e637ef5c7e34e85a70319154 Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Dec 18 11:36:37 2014 +0100 Import du plan d'échantillonnage scléro --- .../main/java/fr/ifremer/wao/entity/Companies.java | 9 +- .../java/fr/ifremer/wao/entity/Organisations.java | 23 +++ .../main/java/fr/ifremer/wao/entity/Specieses.java | 19 ++ .../i18n/wao-persistence_en_GB.properties | 7 +- .../i18n/wao-persistence_fr_FR.properties | 7 +- .../fr/ifremer/wao/services/ObsMerFixtures.java | 222 --------------------- ...singIndividualMeasurementStrategyException.java | 10 + ...ngSclerochronologySamplingContextException.java | 10 + .../services/service/MissingSpeciesException.java | 10 + .../wao/services/service/SamplingPlanService.java | 81 +++++--- .../wao/services/service/WaoServiceSupport.java | 5 + .../administration/OrganisationsService.java | 18 ++ .../service/administration/ReferentialService.java | 9 + .../service/csv/ContactImportExportModel.java | 12 +- ...bsMerObsVenteSamplingPlanImportExportModel.java | 42 ++-- ...atter.java => OrganisationParserFormatter.java} | 48 ++--- .../csv/operations/SpeciesParserFormatter.java | 51 +++++ .../resources/i18n/wao-services_en_GB.properties | 5 + .../resources/i18n/wao-services_fr_FR.properties | 5 + .../wao/services/service/BoatsServiceTest.java | 1 - .../wao/services/service/ContactsServiceTest.java | 1 - .../wao/services/service/ObsMerFixtures.java | 93 +++++++++ .../service/ObsMerSamplingPlanServiceTest.java | 1 - .../services/service/SclerochronologyFixtures.java | 50 +++++ .../SclerochronologySamplingPlanServiceTest.java | 51 +++++ .../ifremer/wao/services/service/WaoFixtures.java | 88 ++++++++ .../src/test/resources/import/echantillonnage.csv | 18 +- .../resources/import/plan-sclerochronologie.csv | 6 + .../wao/web/action/EditSampleRowAction.java | 12 ++ .../action/administration/ImportSpeciesAction.java | 4 +- 30 files changed, 602 insertions(+), 316 deletions(-) diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/entity/Companies.java b/wao-persistence/src/main/java/fr/ifremer/wao/entity/Companies.java index b396747..0b657ae 100644 --- a/wao-persistence/src/main/java/fr/ifremer/wao/entity/Companies.java +++ b/wao-persistence/src/main/java/fr/ifremer/wao/entity/Companies.java @@ -26,14 +26,7 @@ import com.google.common.base.Function; public class Companies { public static Function<Company, String> getName() { - return new GetName(); + return Organisations.getName(); } - protected static class GetName implements Function<Company, String> { - - @Override - public String apply(Company input) { - return input.getName(); - } - } } diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/entity/Organisations.java b/wao-persistence/src/main/java/fr/ifremer/wao/entity/Organisations.java new file mode 100644 index 0000000..bdd649b --- /dev/null +++ b/wao-persistence/src/main/java/fr/ifremer/wao/entity/Organisations.java @@ -0,0 +1,23 @@ +package fr.ifremer.wao.entity; + +import com.google.common.base.Function; +import com.google.common.collect.Ordering; + +public class Organisations { + + public static <T extends Organisation> Function<T, String> getName() { + return new GetName<>(); + } + + public static Ordering<Organisation> comparator() { + return Ordering.natural().onResultOf(getName()); + } + + protected static class GetName<T extends Organisation> implements Function<T, String> { + + @Override + public String apply(T input) { + return input.getName(); + } + } +} diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/entity/Specieses.java b/wao-persistence/src/main/java/fr/ifremer/wao/entity/Specieses.java new file mode 100644 index 0000000..f7f12d6 --- /dev/null +++ b/wao-persistence/src/main/java/fr/ifremer/wao/entity/Specieses.java @@ -0,0 +1,19 @@ +package fr.ifremer.wao.entity; + +import com.google.common.base.Function; + +public class Specieses { + + public static Function<Species, String> getPermanentCode() { + return new GetPermanentCode(); + } + + protected static class GetPermanentCode implements Function<Species, String> { + + @Override + public String apply(Species input) { + return input.getPermanentCode(); + } + } + +} diff --git a/wao-persistence/src/main/resources/i18n/wao-persistence_en_GB.properties b/wao-persistence/src/main/resources/i18n/wao-persistence_en_GB.properties index e4f6dfb..4770f3f 100644 --- a/wao-persistence/src/main/resources/i18n/wao-persistence_en_GB.properties +++ b/wao-persistence/src/main/resources/i18n/wao-persistence_en_GB.properties @@ -21,9 +21,9 @@ GlobalIndicatorValue.GOOD=Level 1 bonus GlobalIndicatorValue.NEUTRAL=Conform GlobalIndicatorValue.VERY_BAD=Level 2 penalty GlobalIndicatorValue.VERY_GOOD=Level 2 bonus -IndividualMeasurementStrategy.SIZE_WEIGHT=Size, weight -IndividualMeasurementStrategy.SIZE_WEIGHT_SEX=Size, weight, sex -IndividualMeasurementStrategy.SIZE_WEIGHT_SEX_MATURITY_AGE=Size, weight, sex, maturity, age +IndividualMeasurementStrategy.SIZE_WEIGHT=Size/Weight +IndividualMeasurementStrategy.SIZE_WEIGHT_SEX=Size/Weight/Sex +IndividualMeasurementStrategy.SIZE_WEIGHT_SEX_MATURITY_AGE=Size/Weight/Sex/Maturity/Age LocationType.AUCTION=Auction LocationType.DISTRICT=District LocationType.PORT=Port @@ -127,6 +127,7 @@ fr.ifremer.wao.entity.FishingGearDcf.TM=Midwater trawls (not specified) fr.ifremer.wao.entity.FishingGearDcf.TMS=Shrimp trawls fr.ifremer.wao.entity.FishingGearDcf.TX=Other trawls (not specified) fr.ifremer.wao.entity.FishingZone=Fishing zones +fr.ifremer.wao.entity.Species=Species fr.ifremer.wao.entity.TargetSpeciesDcf.=Not specified fr.ifremer.wao.entity.TargetSpeciesDcf.ALG=Algae fr.ifremer.wao.entity.TargetSpeciesDcf.ANA=Espèces anadromes diff --git a/wao-persistence/src/main/resources/i18n/wao-persistence_fr_FR.properties b/wao-persistence/src/main/resources/i18n/wao-persistence_fr_FR.properties index 972c780..2b2467c 100644 --- a/wao-persistence/src/main/resources/i18n/wao-persistence_fr_FR.properties +++ b/wao-persistence/src/main/resources/i18n/wao-persistence_fr_FR.properties @@ -21,9 +21,9 @@ GlobalIndicatorValue.GOOD=Bonus de niveau 1 GlobalIndicatorValue.NEUTRAL=Conforme au cahier des charges GlobalIndicatorValue.VERY_BAD=Pénalité de niveau 2 GlobalIndicatorValue.VERY_GOOD=Bonus de niveau 2 -IndividualMeasurementStrategy.SIZE_WEIGHT=Poids, taille -IndividualMeasurementStrategy.SIZE_WEIGHT_SEX=Poids, taille, sexe -IndividualMeasurementStrategy.SIZE_WEIGHT_SEX_MATURITY_AGE=Poids, taille, sexe, maturité, âge +IndividualMeasurementStrategy.SIZE_WEIGHT=Poids/Taille +IndividualMeasurementStrategy.SIZE_WEIGHT_SEX=Poids/Taille/Sexe +IndividualMeasurementStrategy.SIZE_WEIGHT_SEX_MATURITY_AGE=Poids/Taille/Sexe/Maturité/Âge LocationType.AUCTION=Criée LocationType.DISTRICT=Quartier maritime LocationType.PORT=Port @@ -127,6 +127,7 @@ fr.ifremer.wao.entity.FishingGearDcf.TM=Chalut pélagique (non spécifié) fr.ifremer.wao.entity.FishingGearDcf.TMS=Chalut pélagique à crevettes fr.ifremer.wao.entity.FishingGearDcf.TX=Autre chalut (non spécifié) fr.ifremer.wao.entity.FishingZone=Zones de pêche +fr.ifremer.wao.entity.Species=Espèces fr.ifremer.wao.entity.TargetSpeciesDcf.=Non spécifié fr.ifremer.wao.entity.TargetSpeciesDcf.ALG=Algues fr.ifremer.wao.entity.TargetSpeciesDcf.ANA=Espèces anadromes diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/ObsMerFixtures.java b/wao-services/src/main/java/fr/ifremer/wao/services/ObsMerFixtures.java deleted file mode 100644 index 6b42b3c..0000000 --- a/wao-services/src/main/java/fr/ifremer/wao/services/ObsMerFixtures.java +++ /dev/null @@ -1,222 +0,0 @@ -package fr.ifremer.wao.services; - -/* - * #%L - * Wao :: Services - * %% - * Copyright (C) 2009 - 2014 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ - -import fr.ifremer.wao.WaoTechnicalException; -import fr.ifremer.wao.entity.Company; -import fr.ifremer.wao.entity.CompanyTopiaDao; -import fr.ifremer.wao.entity.FishingGearDcf; -import fr.ifremer.wao.entity.FishingGearDcfTopiaDao; -import fr.ifremer.wao.entity.ObsProgram; -import fr.ifremer.wao.entity.TargetSpeciesDcf; -import fr.ifremer.wao.entity.TargetSpeciesDcfTopiaDao; -import fr.ifremer.wao.entity.UserProfile; -import fr.ifremer.wao.entity.UserProfileImpl; -import fr.ifremer.wao.entity.UserProfileTopiaDao; -import fr.ifremer.wao.entity.UserRole; -import fr.ifremer.wao.entity.WaoUser; -import fr.ifremer.wao.entity.WaoUserImpl; -import fr.ifremer.wao.entity.WaoUserTopiaDao; -import fr.ifremer.wao.services.service.ContactsService; -import fr.ifremer.wao.services.service.ImportErrorException; -import fr.ifremer.wao.services.service.ObsMerSamplingPlanService; -import fr.ifremer.wao.services.service.administration.ReferentialService; -import org.apache.commons.io.IOUtils; - -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; - -public class ObsMerFixtures { - - protected WaoServiceContext serviceContext; - - protected Map<String, Company> companies = new HashMap<>(); - - protected Map<String, WaoUser> waoUsers = new HashMap<>(); - - protected Map<String, UserProfile> userProfiles = new HashMap<>(); - - public ObsMerFixtures(WaoServiceContext serviceContext) { - this.serviceContext = serviceContext; - } - - protected Company getCompany(String companyName) { - Company company = companies.get(companyName); - if (company == null) { - CompanyTopiaDao companyDao = serviceContext.getPersistenceContext().getCompanyDao(); - company = companyDao.create( - Company.PROPERTY_NAME, companyName, - Company.PROPERTY_ACTIVE, true); - companies.put(companyName, company); - serviceContext.getPersistenceContext().commit(); - } - return company; - } - - protected UserProfile getUserProfile(String userRole) { - UserProfile userProfile = userProfiles.get(userRole); - if (userProfile == null) { - switch (userRole) { - case "admin": - userProfile = new UserProfileImpl(); - userProfile.setUserRole(UserRole.ADMIN); - userProfile.setObsProgram(ObsProgram.OBSMER); - userProfile.setCanWrite(true); - break; - case "jmichmuche": - userProfile = new UserProfileImpl(); - userProfile.setUserRole(UserRole.COORDINATOR); - userProfile.setObsProgram(ObsProgram.OBSMER); - userProfile.setCanWrite(true); - break; - default: - throw new IllegalArgumentException("Don't know userRole: " + userRole); - } - UserProfileTopiaDao userProfileDao = serviceContext.getPersistenceContext().getUserProfileDao(); - userProfileDao.create(userProfile); - serviceContext.getPersistenceContext().commit(); - userProfiles.put(userRole, userProfile); - } - return userProfile; - } - - protected WaoUser getWaoUser(String login) { - WaoUser waoUser = waoUsers.get(login); - if (waoUser == null) { - - switch (login) { - case "admin": - waoUser = new WaoUserImpl(); - waoUser.setOrganisation(ifremer()); - waoUser.setLogin(login); - waoUser.setActive(true); - waoUser.addUserProfile(getUserProfile("admin")); - break; - case "jmichmuche": - waoUser = new WaoUserImpl(); - waoUser.setOrganisation(ifremer()); - waoUser.setLogin(login); - waoUser.setActive(true); - waoUser.addUserProfile(getUserProfile("jmichmuche")); - break; - default: - throw new IllegalArgumentException("Don't know user: " + login); - } - - WaoUserTopiaDao waoUserDao = serviceContext.getPersistenceContext().getWaoUserDao(); - waoUserDao.create(waoUser); - serviceContext.getPersistenceContext().commit(); - waoUsers.put(login, waoUser); - } - return waoUser; - } - - public Company ifremer() { - return getCompany("Ifremer"); - } - - public Company oceanet() { - return getCompany("OCEANET"); - } - - public AuthenticatedWaoUser admin() { - WaoUser admin = getWaoUser("admin"); - UserProfile userProfile = getUserProfile("admin"); - AuthenticatedWaoUser authenticatedWaoUser = new AuthenticatedWaoUser(admin, userProfile); - return authenticatedWaoUser; - } - - public AuthenticatedWaoUser jmichmuche() { - WaoUser jmichmuche = getWaoUser("jmichmuche"); - UserProfile userProfile = getUserProfile("jmichmuche"); - AuthenticatedWaoUser authenticatedWaoUser = new AuthenticatedWaoUser(jmichmuche, userProfile); - return authenticatedWaoUser; - } - - public void fishingZones() { - InputStream input = null; - try { - input = getClass().getResourceAsStream("/import/zonesPeche.csv"); - serviceContext.newService(ReferentialService.class).importFishingZones(input); - } catch (ImportErrorException e) { - throw new WaoTechnicalException(e); - } finally { - IOUtils.closeQuietly(input); - } - } - - public void navires() { - InputStream input = null; - try { - input = getClass().getResourceAsStream("/import/navires.csv"); - serviceContext.newService(ReferentialService.class).importBoats(input); - } catch (ImportErrorException e) { - throw new WaoTechnicalException(e); - } finally { - IOUtils.closeQuietly(input); - } - } - - public void samplingPlan() { - ifremer(); - oceanet(); - fishingZones(); - InputStream input = null; - try { - input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - serviceContext.newService(ObsMerSamplingPlanService.class).importSamplingPlan(admin(), input); - } catch (ImportErrorException e) { - throw new WaoTechnicalException(e); - } finally { - IOUtils.closeQuietly(input); - } - } - - public void contacts() { - samplingPlan(); - jmichmuche(); - navires(); - InputStream input = null; - try { - input = getClass().getResourceAsStream("/import/contacts.csv"); - serviceContext.newService(ContactsService.class).importContacts(admin(), input); - } catch (ImportErrorException e) { - throw new WaoTechnicalException(e); - } finally { - IOUtils.closeQuietly(input); - } - } - - public FishingGearDcf ptb() { - FishingGearDcfTopiaDao fishingGearDcfDao = serviceContext.getPersistenceContext().getFishingGearDcfDao(); - FishingGearDcf ptb = fishingGearDcfDao.forCodeEquals("PTB").findUnique(); - return ptb; - } - - public TargetSpeciesDcf def() { - TargetSpeciesDcfTopiaDao fishingGearDcfDao = serviceContext.getPersistenceContext().getTargetSpeciesDcfDao(); - TargetSpeciesDcf def = fishingGearDcfDao.forCodeEquals("DEF").findUnique(); - return def; - } - -} diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/MissingIndividualMeasurementStrategyException.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/MissingIndividualMeasurementStrategyException.java new file mode 100644 index 0000000..1886359 --- /dev/null +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/MissingIndividualMeasurementStrategyException.java @@ -0,0 +1,10 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.entity.SampleRow; + +public class MissingIndividualMeasurementStrategyException extends SampleRowValidationException { + + public MissingIndividualMeasurementStrategyException(SampleRow sampleRow) { + super(sampleRow); + } +} diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/MissingSclerochronologySamplingContextException.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/MissingSclerochronologySamplingContextException.java new file mode 100644 index 0000000..212018a --- /dev/null +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/MissingSclerochronologySamplingContextException.java @@ -0,0 +1,10 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.entity.SampleRow; + +public class MissingSclerochronologySamplingContextException extends SampleRowValidationException { + + public MissingSclerochronologySamplingContextException(SampleRow sampleRow) { + super(sampleRow); + } +} diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/MissingSpeciesException.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/MissingSpeciesException.java new file mode 100644 index 0000000..2a6507f --- /dev/null +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/MissingSpeciesException.java @@ -0,0 +1,10 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.entity.SampleRow; + +public class MissingSpeciesException extends SampleRowValidationException { + + public MissingSpeciesException(SampleRow sampleRow) { + super(sampleRow); + } +} diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/SamplingPlanService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/SamplingPlanService.java index a091cc1..6df485f 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/SamplingPlanService.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/SamplingPlanService.java @@ -36,7 +36,6 @@ import fr.ifremer.wao.WaoUtils; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Boats; import fr.ifremer.wao.entity.Company; -import fr.ifremer.wao.entity.CompanyTopiaDao; import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactState; import fr.ifremer.wao.entity.Dcf5Code; @@ -47,6 +46,7 @@ import fr.ifremer.wao.entity.FishingZone; import fr.ifremer.wao.entity.FishingZoneTopiaDao; import fr.ifremer.wao.entity.LocationType; import fr.ifremer.wao.entity.ObsProgram; +import fr.ifremer.wao.entity.Organisation; import fr.ifremer.wao.entity.Profession; import fr.ifremer.wao.entity.ProfessionImpl; import fr.ifremer.wao.entity.ProfessionTopiaDao; @@ -159,31 +159,36 @@ public class SamplingPlanService extends WaoServiceSupport { // We don't want to see all rows but the ones important for today Date fromDate = serviceContext.getNow(); - Date toDate = fromDate; // Dans ObsMer et ObsVente, le plan est mensualisé fromDate = DateUtils.truncate(fromDate, Calendar.MONTH); - // la période initiale doit toujours aller d'avril à mars (contractuel). - // on prend la période dans laquelle on se trouve actuellement + if (authenticatedWaoUser.getObsProgram().isSclerochronology()) { + // on est sur un plan de janvier à décembre + fromDate = DateUtils.setMonths(fromDate, 0); - // si on est avant le premier avril de l'année courante - boolean beforePeriodChangeInCurrentYear = DateUtil.getMonth(fromDate) < 3; - - if (beforePeriodChangeInCurrentYear) { - // on prend la période qui a commencé l'année dernière et qui finit - // cette année - fromDate = DateUtils.setMonths(fromDate, 3); - fromDate = DateUtils.addYears(fromDate, -1); } else { - // on prend la période qui commence cette année et se termine - // l'année prochaine - fromDate = DateUtils.setMonths(fromDate, 3); + // la période initiale doit toujours aller d'avril à mars (contractuel). + // on prend la période dans laquelle on se trouve actuellement + + // si on est avant le premier avril de l'année courante + boolean beforePeriodChangeInCurrentYear = DateUtil.getMonth(fromDate) < 3; + + if (beforePeriodChangeInCurrentYear) { + // on prend la période qui a commencé l'année dernière et qui finit + // cette année + fromDate = DateUtils.setMonths(fromDate, 3); + fromDate = DateUtils.addYears(fromDate, -1); + } else { + // on prend la période qui commence cette année et se termine + // l'année prochaine + fromDate = DateUtils.setMonths(fromDate, 3); + } } // on a fromDate sur le premier avril de la bonne année, on va // jusqu'au mois de mars suivant - toDate = DateUtils.addMonths(fromDate, 11); + Date toDate = DateUtils.addMonths(fromDate, 11); newFilter.setPeriodFrom(fromDate); newFilter.setPeriodTo(toDate); @@ -345,6 +350,7 @@ public class SamplingPlanService extends WaoServiceSupport { ImmutableMap<String, Company> allCompanies = Maps.uniqueIndex( + // TODO brendan 15/12/14 getOrganisationsService().getOrganisationsToWorkOnSampleRow(obsProgram); getCompaniesService().getAllCompanies(), TopiaEntities.getTopiaIdFunction() ); @@ -607,6 +613,15 @@ public class SamplingPlanService extends WaoServiceSupport { } catch (NoEffortDefinedException e) { String message = I18n.l(getLocale(), "wao.import.sampleRow.failure.noEffortDefined", lineNumber); throw new ImportErrorException(message); + } catch (MissingSclerochronologySamplingContextException e) { + String message = I18n.l(getLocale(), "wao.import.sampleRow.failure.missingSclerochronologySamplingContext", lineNumber); + throw new ImportErrorException(message); + } catch (MissingIndividualMeasurementStrategyException e) { + String message = I18n.l(getLocale(), "wao.import.sampleRow.failure.missingIndividualMeasurementStrategy", lineNumber); + throw new ImportErrorException(message); + } catch (MissingSpeciesException e) { + String message = I18n.l(getLocale(), "wao.import.sampleRow.failure.missingSpecies", lineNumber); + throw new ImportErrorException(message); } save0(updateSampleRowCommand); @@ -625,8 +640,7 @@ public class SamplingPlanService extends WaoServiceSupport { ObsProgram obsProgram = authenticatedWaoUser.getObsProgram(); - CompanyTopiaDao companyDao = getCompanyDao(); - List<Company> activeCompanies = companyDao.forActiveEquals(true).findAll(); + Set<Organisation> organisations = getOrganisationsService().getOrganisationsToWorkOnSampleRow(obsProgram); TerrestrialLocationTopiaDao terrestrialLocationDao = getTerrestrialLocationDao(); List<TerrestrialLocation> terrestrialDistricts = @@ -640,7 +654,7 @@ public class SamplingPlanService extends WaoServiceSupport { ImportModel<SampleRow> samplingPlanImportModel = new ObsMerObsVenteSamplingPlanImportExportModel(getLocale(), obsProgram, - activeCompanies, + organisations, fishingZones, terrestrialDistricts, referentialService); @@ -713,7 +727,10 @@ public class SamplingPlanService extends WaoServiceSupport { SampleMonthWithIllegalExpectedTidesValueException, MissingDcf5CodesException, SampleRowCodeMustBeUniqueException, - NoEffortDefinedException { + NoEffortDefinedException, + MissingSclerochronologySamplingContextException, + MissingSpeciesException, + MissingIndividualMeasurementStrategyException { SampleRow sampleRow = updateSampleRowCommand.getSampleRow(); @@ -725,8 +742,10 @@ public class SamplingPlanService extends WaoServiceSupport { throw new SampleRowCodeMustBeUniqueException(); } + ObsProgram obsProgram = sampleRow.getObsProgram(); + if (updateSampleRowCommand.isCreation()) { - if ( ! sampleRow.getObsProgram().getSampleRowCodePattern().matcher(sampleRow.getCode()).matches()) { + if ( ! obsProgram.getSampleRowCodePattern().matcher(sampleRow.getCode()).matches()) { throw new WrongSampleRowCodeFormatException(sampleRow); } } else { @@ -751,7 +770,7 @@ public class SamplingPlanService extends WaoServiceSupport { throw new MissingFishingZonesException(sampleRow); } - if (sampleRow.getObsProgram().isObsVente()) { + if (obsProgram.isObsVente()) { if (sampleRow.getSamplingStrategy().isSpecificStock() && StringUtils.isEmpty(sampleRow.getProfession().getSpecies())) { throw new MissingProfessionSpeciesException(sampleRow); } @@ -767,8 +786,22 @@ public class SamplingPlanService extends WaoServiceSupport { } } - if (sampleRow.isDcf5CodeEmpty()) { - throw new MissingDcf5CodesException(sampleRow); + if (obsProgram.isObsVente() || obsProgram.isObsMer()) { + if (sampleRow.isDcf5CodeEmpty()) { + throw new MissingDcf5CodesException(sampleRow); + } + } + + if (obsProgram.isSclerochronology()) { + if (sampleRow.getSclerochronologySamplingContext() == null) { + throw new MissingSclerochronologySamplingContextException(sampleRow); + } + if (sampleRow.getSpecies() == null) { + throw new MissingSpeciesException(sampleRow); + } + if (sampleRow.getIndividualMeasurementStrategy() == null) { + throw new MissingIndividualMeasurementStrategyException(sampleRow); + } } } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/WaoServiceSupport.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/WaoServiceSupport.java index c77f609..ebc60f9 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/WaoServiceSupport.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/WaoServiceSupport.java @@ -50,6 +50,7 @@ import fr.ifremer.wao.services.WaoService; import fr.ifremer.wao.services.WaoServiceContext; import fr.ifremer.wao.services.WaoWebApplicationContext; import fr.ifremer.wao.services.service.administration.CompaniesService; +import fr.ifremer.wao.services.service.administration.LaboratoriesService; import fr.ifremer.wao.services.service.administration.OrganisationsService; import fr.ifremer.wao.services.service.administration.ReferentialService; import fr.ifremer.wao.services.service.administration.WaoUsersService; @@ -206,4 +207,8 @@ public abstract class WaoServiceSupport implements WaoService { protected LaboratoryTopiaDao getLaboratoryDao() { return getPersistenceContext().getLaboratoryDao(); } + + public LaboratoriesService getLaboratoriesService() { + return newService(LaboratoriesService.class); + } } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java index 2f7f781..8e90623 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/OrganisationsService.java @@ -3,8 +3,10 @@ package fr.ifremer.wao.services.service.administration; import com.google.common.collect.Iterables; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.Laboratory; +import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.Organisation; import fr.ifremer.wao.entity.OrganisationTopiaDao; +import fr.ifremer.wao.entity.Organisations; import fr.ifremer.wao.services.service.IllegalDeletionException; import fr.ifremer.wao.services.service.WaoServiceSupport; import org.nuiton.topia.persistence.TopiaEntity; @@ -13,6 +15,8 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; public class OrganisationsService extends WaoServiceSupport { @@ -74,4 +78,18 @@ public class OrganisationsService extends WaoServiceSupport { } + public SortedSet<Organisation> getOrganisationsToWorkOnSampleRow(ObsProgram obsProgram) { + + SortedSet<Organisation> organisations = new TreeSet<>(Organisations.comparator()); + + organisations.addAll(getCompaniesService().getAllCompanies()); + + if (obsProgram.isSclerochronology()) { + organisations.addAll(getLaboratoriesService().getAllLaboratories()); + } + + return organisations; + + } + } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/ReferentialService.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/ReferentialService.java index 9843992..122c634 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/ReferentialService.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/administration/ReferentialService.java @@ -861,4 +861,13 @@ public class ReferentialService extends WaoServiceSupport { commit(); } + + public ImmutableSet<Species> getAllSpecies() { + + List<Species> all = getSpeciesDao().findAll(); + + return ImmutableSet.copyOf(all); + + } + } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ContactImportExportModel.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ContactImportExportModel.java index afe38e9..ab838bd 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ContactImportExportModel.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ContactImportExportModel.java @@ -26,7 +26,6 @@ package fr.ifremer.wao.services.service.csv; import com.google.common.base.Preconditions; import fr.ifremer.wao.WaoUtils; import fr.ifremer.wao.entity.Boat; -import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactImpl; import fr.ifremer.wao.entity.ContactStateMotif; @@ -34,11 +33,12 @@ import fr.ifremer.wao.entity.DataReliability; import fr.ifremer.wao.entity.LocationType; import fr.ifremer.wao.entity.ObsProgram; import fr.ifremer.wao.entity.ObservedDataControl; +import fr.ifremer.wao.entity.Organisation; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.TerrestrialLocation; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.services.service.csv.operations.BoatParserFormatter; -import fr.ifremer.wao.services.service.csv.operations.CompanyParserFormatter; +import fr.ifremer.wao.services.service.csv.operations.OrganisationParserFormatter; import fr.ifremer.wao.services.service.csv.operations.ContactStateMotivesParserFormatter; import fr.ifremer.wao.services.service.csv.operations.ContactStateParserFormatter; import fr.ifremer.wao.services.service.csv.operations.DayParserFormatter; @@ -164,13 +164,13 @@ public class ContactImportExportModel implements ImportExportModel<Contact> { modelBuilder.newIgnoredColumn("CONTACT_OBSERVATEURS_SOCIETE"); modelBuilder.newColumnForExport( "CONTACT_OBSERVATEURS_SOCIETE", - new ValueGetter<Contact, Company>() { + new ValueGetter<Contact, Organisation>() { @Override - public Company get(Contact contact) { - return contact.getMainObserver().getCompany(); + public Organisation get(Contact contact) { + return contact.getMainObserver().getOrganisation(); } }, - new CompanyParserFormatter(locale, null) + new OrganisationParserFormatter(locale, null) ); modelBuilder.newColumnForImportExport("CONTACT_ETAT", "contactState", new ContactStateParserFormatter(locale, obsProgram)); diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ObsMerObsVenteSamplingPlanImportExportModel.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ObsMerObsVenteSamplingPlanImportExportModel.java index 824223f..54204a6 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ObsMerObsVenteSamplingPlanImportExportModel.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/ObsMerObsVenteSamplingPlanImportExportModel.java @@ -26,9 +26,10 @@ package fr.ifremer.wao.services.service.csv; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; -import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.FishingZone; +import fr.ifremer.wao.entity.IndividualMeasurementStrategy; import fr.ifremer.wao.entity.ObsProgram; +import fr.ifremer.wao.entity.Organisation; import fr.ifremer.wao.entity.Profession; import fr.ifremer.wao.entity.ProfessionImpl; import fr.ifremer.wao.entity.SampleMonth; @@ -36,15 +37,17 @@ import fr.ifremer.wao.entity.SampleMonthImpl; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.SampleRowImpl; import fr.ifremer.wao.entity.SamplingStrategy; +import fr.ifremer.wao.entity.SclerochronologySamplingContext; import fr.ifremer.wao.entity.TerrestrialLocation; import fr.ifremer.wao.services.service.administration.ReferentialService; -import fr.ifremer.wao.services.service.csv.operations.CompanyParserFormatter; import fr.ifremer.wao.services.service.csv.operations.Dcf5CodesParserFormatter; import fr.ifremer.wao.services.service.csv.operations.DistrictNamesFormatter; import fr.ifremer.wao.services.service.csv.operations.DistrictsParserFormatter; import fr.ifremer.wao.services.service.csv.operations.FishingZonesParserFormatter; import fr.ifremer.wao.services.service.csv.operations.I18nAbleParserFormatter; +import fr.ifremer.wao.services.service.csv.operations.OrganisationParserFormatter; import fr.ifremer.wao.services.service.csv.operations.SampleRowCodeParserFormatter; +import fr.ifremer.wao.services.service.csv.operations.SpeciesParserFormatter; import org.nuiton.csv.Common; import org.nuiton.csv.ExportableColumn; import org.nuiton.csv.ImportExportModel; @@ -59,6 +62,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.Set; import java.util.regex.Pattern; /** @@ -115,7 +119,7 @@ public class ObsMerObsVenteSamplingPlanImportExportModel implements ImportExport protected ObsProgram obsProgram; - protected List<Company> companies; + protected Set<Organisation> organisations; protected List<FishingZone> fishingZones; @@ -136,12 +140,12 @@ public class ObsMerObsVenteSamplingPlanImportExportModel implements ImportExport /** Pour l'import */ public ObsMerObsVenteSamplingPlanImportExportModel(Locale locale, ObsProgram obsProgram, - List<Company> companies, List<FishingZone> fishingZones, + Set<Organisation> organisations, List<FishingZone> fishingZones, List<TerrestrialLocation> terrestrialDistricts, ReferentialService referentialService) { this.locale = locale; this.obsProgram = obsProgram; - this.companies = companies; + this.organisations = organisations; this.fishingZones = fishingZones; this.terrestrialDistricts = terrestrialDistricts; this.referentialService = referentialService; @@ -194,7 +198,7 @@ public class ObsMerObsVenteSamplingPlanImportExportModel implements ImportExport modelBuilder = new ModelBuilder<>(); modelBuilder.newColumnForImportExport("PLAN_CODE", SampleRow.PROPERTY_CODE, new SampleRowCodeParserFormatter(locale, obsProgram)); - modelBuilder.newColumnForImportExport("SOCIETE_NOM", SampleRow.PROPERTY_ORGANISATION, new CompanyParserFormatter(locale, companies)); + modelBuilder.newColumnForImportExport("ORGANISATION_NOM", SampleRow.PROPERTY_ORGANISATION, new OrganisationParserFormatter(locale, organisations)); modelBuilder.newColumnForExport("PECHE_FACADE", "facade"); modelBuilder.newIgnoredColumn("PECHE_FACADE"); @@ -204,12 +208,6 @@ public class ObsMerObsVenteSamplingPlanImportExportModel implements ImportExport modelBuilder.newColumnForImportExport("PECHE_DIVISION", SampleRow.PROPERTY_FISHING_ZONE, new FishingZonesParserFormatter(locale, fishingZones)); modelBuilder.newColumnForImportExport("PECHE_AUTRE", SampleRow.PROPERTY_FISHING_ZONES_INFOS); - modelBuilder.newColumnForImportExport("METIER_CODE_DCF5", SampleRow.PROPERTY_DCF5_CODE, new Dcf5CodesParserFormatter(locale, referentialService)); - modelBuilder.newColumnForImportExport("METIER_MAILLAGE", SampleRow.PROPERTY_PROFESSION + "." + Profession.PROPERTY_MESH_SIZE); - modelBuilder.newColumnForImportExport("METIER_TAILLE", SampleRow.PROPERTY_PROFESSION + "." + Profession.PROPERTY_SIZE); - modelBuilder.newColumnForImportExport("METIER_AUTRE", SampleRow.PROPERTY_PROFESSION + "." + Profession.PROPERTY_OTHER); - modelBuilder.newColumnForImportExport("METIER_LIBELLE", SampleRow.PROPERTY_PROFESSION + "." + Profession.PROPERTY_LIBELLE); - modelBuilder.newColumnForImportExport("METIER_ESPECES", SampleRow.PROPERTY_PROFESSION + "." + Profession.PROPERTY_SPECIES); modelBuilder.newColumnForImportExport("PROGRAMME_CODE", SampleRow.PROPERTY_PROGRAM_NAME); modelBuilder.newColumnForImportExport("PROGRAMME_DEBUT", SampleRow.PROPERTY_PERIOD_BEGIN, MONTH_YEAR_PARSER_FORMATTER); @@ -221,13 +219,29 @@ public class ObsMerObsVenteSamplingPlanImportExportModel implements ImportExport modelBuilder.newColumnForImportExport(headerName, new ExpectedTidesValueGetterSetter(month), Common.INTEGER); } - if (obsProgram == ObsProgram.OBSMER) { + if (obsProgram.isSclerochronology()) { + modelBuilder.newColumnForImportExport("ESPECE_CIBLE", SampleRow.PROPERTY_SPECIES, new SpeciesParserFormatter(locale, referentialService.getAllSpecies())); + modelBuilder.newColumnForImportExport("CONTEXTE", SampleRow.PROPERTY_SCLEROCHRONOLOGY_SAMPLING_CONTEXT, new I18nAbleParserFormatter<>(locale, SclerochronologySamplingContext.values())); + modelBuilder.newColumnForImportExport("CONTEXTE_COMPLEMENT", SampleRow.PROPERTY_SCLEROCHRONOLOGY_SAMPLING_CONTEXT_INFO); + modelBuilder.newColumnForImportExport("MESURES", SampleRow.PROPERTY_INDIVIDUAL_MEASUREMENT_STRATEGY, new I18nAbleParserFormatter<>(locale, IndividualMeasurementStrategy.values())); + } + + if (obsProgram.isObsMer() || obsProgram.isObsVente()) { + modelBuilder.newColumnForImportExport("METIER_CODE_DCF5", SampleRow.PROPERTY_DCF5_CODE, new Dcf5CodesParserFormatter(locale, referentialService)); + modelBuilder.newColumnForImportExport("METIER_MAILLAGE", SampleRow.PROPERTY_PROFESSION + "." + Profession.PROPERTY_MESH_SIZE); + modelBuilder.newColumnForImportExport("METIER_TAILLE", SampleRow.PROPERTY_PROFESSION + "." + Profession.PROPERTY_SIZE); + modelBuilder.newColumnForImportExport("METIER_AUTRE", SampleRow.PROPERTY_PROFESSION + "." + Profession.PROPERTY_OTHER); + modelBuilder.newColumnForImportExport("METIER_LIBELLE", SampleRow.PROPERTY_PROFESSION + "." + Profession.PROPERTY_LIBELLE); + modelBuilder.newColumnForImportExport("METIER_ESPECES", SampleRow.PROPERTY_PROFESSION + "." + Profession.PROPERTY_SPECIES); + } + + if (obsProgram.isObsMer()) { modelBuilder.newColumnForImportExport("PLAN_DUREE_MOY", SampleRow.PROPERTY_AVERAGE_TIDE_TIME, Common.PRIMITIVE_INTEGER); modelBuilder.newColumnForImportExport("PLAN_NB_OBSERV", SampleRow.PROPERTY_NB_OBSERVANTS, Common.PRIMITIVE_INTEGER); modelBuilder.newColumnForImportExport("TAUX_COUVERTURE_APPLIQUE", SampleRow.PROPERTY_APPLIED_COVERAGE_RATE, Common.DOUBLE); } - if (obsProgram == ObsProgram.OBSVENTE) { + if (obsProgram.isObsVente()) { modelBuilder.newColumnForImportExport("PLAN_STRATEGIE", "samplingStrategy", new I18nAbleParserFormatter<>(locale, SamplingStrategy.values())); modelBuilder.newColumnForImportExport("PLAN_LIEU_CODE", SampleRow.PROPERTY_TERRESTRIAL_LOCATIONS, new DistrictsParserFormatter(locale, terrestrialDistricts)); modelBuilder.newColumnForExport("PLAN_LIEU_NOM", SampleRow.PROPERTY_TERRESTRIAL_LOCATIONS, new DistrictNamesFormatter()); diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/CompanyParserFormatter.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/OrganisationParserFormatter.java similarity index 50% rename from wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/CompanyParserFormatter.java rename to wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/OrganisationParserFormatter.java index 1424462..472f0a2 100644 --- a/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/CompanyParserFormatter.java +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/OrganisationParserFormatter.java @@ -25,51 +25,53 @@ package fr.ifremer.wao.services.service.csv.operations; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; -import fr.ifremer.wao.entity.Companies; -import fr.ifremer.wao.entity.Company; +import fr.ifremer.wao.entity.Organisation; +import fr.ifremer.wao.entity.Organisations; import org.apache.commons.lang3.StringUtils; import org.nuiton.csv.ValueParserFormatter; import org.nuiton.i18n.I18n; import java.text.ParseException; -import java.util.List; import java.util.Locale; +import java.util.Set; -/** Parse a company according to it's name. */ -public class CompanyParserFormatter implements ValueParserFormatter<Company> { +/** + * Parse an {@link fr.ifremer.wao.entity.Organisation} according to it's name. + */ +public class OrganisationParserFormatter implements ValueParserFormatter<Organisation> { protected final Locale locale; - protected List<Company> companies; + protected Set<Organisation> organisations; - protected ImmutableMap<String, Company> indexedCompanies; + protected ImmutableMap<String, Organisation> indexedOrganisations; - public CompanyParserFormatter(Locale locale, List<Company> companies) { + public OrganisationParserFormatter(Locale locale, Set<Organisation> organisations) { this.locale = locale; - this.companies = companies; + this.organisations = organisations; } @Override - public String format(Company company) { - String companyName = ""; - if (company != null) { - companyName = company.getName(); + public String format(Organisation organisation) { + String organisationName = ""; + if (organisation != null) { + organisationName = organisation.getName(); } - return companyName; + return organisationName; } @Override - public Company parse(String companyName) throws ParseException { - if (indexedCompanies == null) { - indexedCompanies = Maps.uniqueIndex(companies, Companies.getName()); + public Organisation parse(String organisationName) throws ParseException { + if (indexedOrganisations == null) { + indexedOrganisations = Maps.uniqueIndex(organisations, Organisations.getName()); } - Company company = null; - if (StringUtils.isNotBlank(companyName)) { - company = indexedCompanies.get(companyName.trim()); - if (company == null) { - throw new IllegalArgumentException(I18n.l(locale, "wao.import.contact.failure.unkwonCompany", companyName)); + Organisation organisation = null; + if (StringUtils.isNotBlank(organisationName)) { + organisation = indexedOrganisations.get(organisationName.trim()); + if (organisation == null) { + throw new IllegalArgumentException(I18n.l(locale, "wao.import.sampleRow.failure.unknownOrganisation", organisationName)); } } - return company; + return organisation; } } diff --git a/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/SpeciesParserFormatter.java b/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/SpeciesParserFormatter.java new file mode 100644 index 0000000..92bea35 --- /dev/null +++ b/wao-services/src/main/java/fr/ifremer/wao/services/service/csv/operations/SpeciesParserFormatter.java @@ -0,0 +1,51 @@ +package fr.ifremer.wao.services.service.csv.operations; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import fr.ifremer.wao.entity.Species; +import fr.ifremer.wao.entity.Specieses; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.csv.ValueParserFormatter; +import org.nuiton.i18n.I18n; + +import java.text.ParseException; +import java.util.Locale; + +public class SpeciesParserFormatter implements ValueParserFormatter<Species> { + + protected Locale locale; + + protected ImmutableSet<Species> species; + + protected ImmutableMap<String, Species> indexedSpecies; + + public SpeciesParserFormatter(Locale locale, ImmutableSet<Species> species) { + this.locale = locale; + this.species = species; + } + + @Override + public String format(Species species) { + String speciesName = ""; + if (species != null) { + speciesName = species.getPermanentCode(); + } + return speciesName; + } + + @Override + public Species parse(String speciesPermanentCode) throws ParseException { + if (indexedSpecies == null) { + indexedSpecies = Maps.uniqueIndex(species, Specieses.getPermanentCode()); + } + Species species = null; + if (StringUtils.isNotBlank(speciesPermanentCode)) { + species = indexedSpecies.get(speciesPermanentCode.trim()); + if (species == null) { + throw new IllegalArgumentException(I18n.l(locale, "wao.import.sampleRow.failure.unknownSpecies", speciesPermanentCode)); + } + } + return species; + } +} diff --git a/wao-services/src/main/resources/i18n/wao-services_en_GB.properties b/wao-services/src/main/resources/i18n/wao-services_en_GB.properties index 41b794c..a8a104a 100644 --- a/wao-services/src/main/resources/i18n/wao-services_en_GB.properties +++ b/wao-services/src/main/resources/i18n/wao-services_en_GB.properties @@ -86,14 +86,19 @@ wao.import.sampleRow.failure.codeMustBeUnique=Line %s\: The sample row code must wao.import.sampleRow.failure.fishingZoneMissing=Line %s\: You must precise at least one fishing zone wao.import.sampleRow.failure.missingDcf5Codes=Line %s\: You must precise at least one DCF5 code wao.import.sampleRow.failure.missingFishingZones=Line %s\: You must precise at least one fishing zone +wao.import.sampleRow.failure.missingIndividualMeasurementStrategy= Line %s\: You myst precise measurement strategy wao.import.sampleRow.failure.missingPeriodBegin=Line %s\: You must precise the period beginning wao.import.sampleRow.failure.missingPeriodEnd=Line %s\: You must precise the period end wao.import.sampleRow.failure.missingProfessionSpecies=Line %s\: For this sampling strategy, you must provide the species wao.import.sampleRow.failure.missingProgramName=Line %s\: You must precise the program name wao.import.sampleRow.failure.missingSampleRowCode=Line %s\: You must precise a code for the sample row +wao.import.sampleRow.failure.missingSclerochronologySamplingContext=Line %s\:You must precise the context +wao.import.sampleRow.failure.missingSpecies=Line %s\:You must precise the species wao.import.sampleRow.failure.noEffortDefined=Line %s\: You must precise effort wao.import.sampleRow.failure.sampleMonthWithIllegalExpectedTidesValue=Line %s\: Effort must be positive for month %s wao.import.sampleRow.failure.unknownFishingGearDcfCode=Unknown fishing gear code\: %s +wao.import.sampleRow.failure.unknownOrganisation=Unknown organisation %s +wao.import.sampleRow.failure.unknownSpecies=Unknown species %s wao.import.sampleRow.failure.unknownTargetSpeciesDcfCode=Unknown target species code\: %s wao.import.sampleRow.failure.wrongFishingZone=There is no fishing zone with the code '%s' wao.import.sampleRow.failure.wrongSampleRowCodeFormat=The sample row code '%s' is not compliant with the format "YYYY_PIIII" diff --git a/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties b/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties index a4dc317..01f18dd 100644 --- a/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties +++ b/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties @@ -84,14 +84,19 @@ wao.import.sampleRow.failure.codeMustBeUnique=Ligne %s \: Le code ligne doit êt wao.import.sampleRow.failure.fishingZoneMissing=Ligne %s \: Il faut préciser au moins une zone de pêche wao.import.sampleRow.failure.missingDcf5Codes=Ligne %s \: Il faut préciser au moins un code DCF5 wao.import.sampleRow.failure.missingFishingZones=Ligne %s \: Il faut préciser au moins une zone de pêche +wao.import.sampleRow.failure.missingIndividualMeasurementStrategy=Ligne %s \: il faut préciser l'ensemble de caractéristiques à mesurer wao.import.sampleRow.failure.missingPeriodBegin=Ligne %s \: Il faut préciser le débat de la période wao.import.sampleRow.failure.missingPeriodEnd=Ligne %s \: Il faut préciser la fin de la période wao.import.sampleRow.failure.missingProfessionSpecies=Ligne %s \: Il faut préciser les espèces cibles pour cette stratégie d'échantillonage wao.import.sampleRow.failure.missingProgramName=Ligne %s \: Il faut préciser le programme wao.import.sampleRow.failure.missingSampleRowCode=Ligne %s \: Il faut préciser un code pour a ligne du plan +wao.import.sampleRow.failure.missingSclerochronologySamplingContext=Ligne %s \: Il faut préciser le contexte dans lequel se fera l'échantillonnage +wao.import.sampleRow.failure.missingSpecies=Ligne %s \: Il faut préciser l'espèce cible wao.import.sampleRow.failure.noEffortDefined=Ligne %s \: Il faut préciser un effort sur au moins un mois wao.import.sampleRow.failure.sampleMonthWithIllegalExpectedTidesValue=Ligne %s \: l'effort d'observation doit être positif pour le mois %s wao.import.sampleRow.failure.unknownFishingGearDcfCode=Le code engin %s est inconnu du référentiel +wao.import.sampleRow.failure.unknownOrganisation=L'organisation %s n'est pas connue +wao.import.sampleRow.failure.unknownSpecies=L'espèce %s n'est pas connue wao.import.sampleRow.failure.unknownTargetSpeciesDcfCode=Le code espèce cible %s est inconnu du référentiel wao.import.sampleRow.failure.wrongFishingZone=Le code '%s' ne correspond à aucune zone de pêche connue du référentiel wao.import.sampleRow.failure.wrongSampleRowCodeFormat=Le code '%s' n'est pas un code de ligne valide selon le format "AAAA_PIIII" diff --git a/wao-services/src/test/java/fr/ifremer/wao/services/service/BoatsServiceTest.java b/wao-services/src/test/java/fr/ifremer/wao/services/service/BoatsServiceTest.java index 58eaf29..6ec77b0 100644 --- a/wao-services/src/test/java/fr/ifremer/wao/services/service/BoatsServiceTest.java +++ b/wao-services/src/test/java/fr/ifremer/wao/services/service/BoatsServiceTest.java @@ -23,7 +23,6 @@ package fr.ifremer.wao.services.service; import fr.ifremer.wao.BoatsFilter; import fr.ifremer.wao.services.AbstractWaoServiceTest; -import fr.ifremer.wao.services.ObsMerFixtures; import org.junit.Before; import org.junit.Test; import org.nuiton.util.pagination.PaginationParameter; diff --git a/wao-services/src/test/java/fr/ifremer/wao/services/service/ContactsServiceTest.java b/wao-services/src/test/java/fr/ifremer/wao/services/service/ContactsServiceTest.java index ff213a8..ed7f169 100644 --- a/wao-services/src/test/java/fr/ifremer/wao/services/service/ContactsServiceTest.java +++ b/wao-services/src/test/java/fr/ifremer/wao/services/service/ContactsServiceTest.java @@ -23,7 +23,6 @@ package fr.ifremer.wao.services.service; import fr.ifremer.wao.ContactsFilter; import fr.ifremer.wao.services.AbstractWaoServiceTest; -import fr.ifremer.wao.services.ObsMerFixtures; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerFixtures.java b/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerFixtures.java new file mode 100644 index 0000000..e3c1806 --- /dev/null +++ b/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerFixtures.java @@ -0,0 +1,93 @@ +package fr.ifremer.wao.services.service; + +/* + * #%L + * Wao :: Services + * %% + * Copyright (C) 2009 - 2014 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.wao.WaoTechnicalException; +import fr.ifremer.wao.entity.FishingGearDcf; +import fr.ifremer.wao.entity.FishingGearDcfTopiaDao; +import fr.ifremer.wao.entity.ObsProgram; +import fr.ifremer.wao.entity.TargetSpeciesDcf; +import fr.ifremer.wao.entity.TargetSpeciesDcfTopiaDao; +import fr.ifremer.wao.entity.UserRole; +import fr.ifremer.wao.services.AuthenticatedWaoUser; +import fr.ifremer.wao.services.WaoServiceContext; +import org.apache.commons.io.IOUtils; + +import java.io.InputStream; + +public class ObsMerFixtures extends WaoFixtures { + + public ObsMerFixtures(WaoServiceContext serviceContext) { + super(serviceContext); + } + + public AuthenticatedWaoUser admin() { + return newAuthenticatedWaoUser("admin", ObsProgram.OBSMER, UserRole.ADMIN); + } + + public AuthenticatedWaoUser jmichmuche() { + return newAuthenticatedWaoUser("jmichmuche", ObsProgram.OBSMER, UserRole.COORDINATOR); + } + + public void samplingPlan() { + ifremer(); + oceanet(); + fishingZones(); + InputStream input = null; + try { + input = getClass().getResourceAsStream("/import/echantillonnage.csv"); + serviceContext.newService(ObsMerSamplingPlanService.class).importSamplingPlan(admin(), input); + } catch (ImportErrorException e) { + throw new WaoTechnicalException(e); + } finally { + IOUtils.closeQuietly(input); + } + } + + public void contacts() { + samplingPlan(); + jmichmuche(); + navires(); + InputStream input = null; + try { + input = getClass().getResourceAsStream("/import/contacts.csv"); + serviceContext.newService(ContactsService.class).importContacts(admin(), input); + } catch (ImportErrorException e) { + throw new WaoTechnicalException(e); + } finally { + IOUtils.closeQuietly(input); + } + } + + public FishingGearDcf ptb() { + FishingGearDcfTopiaDao fishingGearDcfDao = serviceContext.getPersistenceContext().getFishingGearDcfDao(); + FishingGearDcf ptb = fishingGearDcfDao.forCodeEquals("PTB").findUnique(); + return ptb; + } + + public TargetSpeciesDcf def() { + TargetSpeciesDcfTopiaDao fishingGearDcfDao = serviceContext.getPersistenceContext().getTargetSpeciesDcfDao(); + TargetSpeciesDcf def = fishingGearDcfDao.forCodeEquals("DEF").findUnique(); + return def; + } + +} diff --git a/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanServiceTest.java b/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanServiceTest.java index 61c6d5b..76f8f4f 100644 --- a/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanServiceTest.java +++ b/wao-services/src/test/java/fr/ifremer/wao/services/service/ObsMerSamplingPlanServiceTest.java @@ -27,7 +27,6 @@ import fr.ifremer.wao.entity.SampleMonth; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.services.AbstractWaoServiceTest; import fr.ifremer.wao.services.FakeWaoServiceContext; -import fr.ifremer.wao.services.ObsMerFixtures; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/wao-services/src/test/java/fr/ifremer/wao/services/service/SclerochronologyFixtures.java b/wao-services/src/test/java/fr/ifremer/wao/services/service/SclerochronologyFixtures.java new file mode 100644 index 0000000..0310d5e --- /dev/null +++ b/wao-services/src/test/java/fr/ifremer/wao/services/service/SclerochronologyFixtures.java @@ -0,0 +1,50 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.WaoTechnicalException; +import fr.ifremer.wao.entity.Laboratory; +import fr.ifremer.wao.entity.ObsProgram; +import fr.ifremer.wao.entity.UserRole; +import fr.ifremer.wao.services.AuthenticatedWaoUser; +import fr.ifremer.wao.services.WaoServiceContext; +import fr.ifremer.wao.services.service.administration.LaboratoriesService; +import fr.ifremer.wao.services.service.administration.ReferentialService; +import org.apache.commons.io.IOUtils; + +import java.io.InputStream; + +public class SclerochronologyFixtures extends WaoFixtures { + + public SclerochronologyFixtures(WaoServiceContext serviceContext) { + super(serviceContext); + } + + public AuthenticatedWaoUser admin() { + return newAuthenticatedWaoUser("admin", ObsProgram.SCLEROCHRONOLOGY, UserRole.ADMIN); + } + + public void species() { + InputStream input = null; + try { + input = getClass().getResourceAsStream("/import/especes.csv"); + serviceContext.newService(ReferentialService.class).importSpecies(input); + } catch (ImportErrorException e) { + throw new WaoTechnicalException(e); + } finally { + IOUtils.closeQuietly(input); + } + } + + protected boolean emhLaboratoryCreated; + + public void emhLaboratory() { + if ( ! emhLaboratoryCreated) { + ifremer(); + LaboratoriesService service = serviceContext.newService(LaboratoriesService.class); + Laboratory laboratory = service.newLaboratory(); + laboratory.setName("EMH"); + service.save(laboratory); + emhLaboratoryCreated = true; + } + } + +} diff --git a/wao-services/src/test/java/fr/ifremer/wao/services/service/SclerochronologySamplingPlanServiceTest.java b/wao-services/src/test/java/fr/ifremer/wao/services/service/SclerochronologySamplingPlanServiceTest.java new file mode 100644 index 0000000..b959dab --- /dev/null +++ b/wao-services/src/test/java/fr/ifremer/wao/services/service/SclerochronologySamplingPlanServiceTest.java @@ -0,0 +1,51 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.services.AbstractWaoServiceTest; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.io.InputStream; + +public class SclerochronologySamplingPlanServiceTest extends AbstractWaoServiceTest { + + private static final Log log = LogFactory.getLog(SclerochronologySamplingPlanServiceTest.class); + + protected SclerochronologySamplingPlanService service; + + protected SclerochronologyFixtures fixtures; + + protected boolean isDatabaseWithReferential() { + return true; + } + + @Before + public void setUp() { + service = newService(SclerochronologySamplingPlanService.class); + fixtures = new SclerochronologyFixtures(newServiceContext()); + } + + @Test + public void testImportSamplingPlan() { + fixtures.fishingZones(); + fixtures.species(); + fixtures.oceanet(); + fixtures.emhLaboratory(); + InputStream input = null; + try { + input = getClass().getResourceAsStream("/import/plan-sclerochronologie.csv"); + service.importSamplingPlan(fixtures.admin(), input); + } catch (ImportErrorException e) { + if (log.isDebugEnabled()) { + log.debug("unexpected exception raised", e); + } + Assert.fail("exception should not be raised"); + } finally { + IOUtils.closeQuietly(input); + } + + } +} \ No newline at end of file diff --git a/wao-services/src/test/java/fr/ifremer/wao/services/service/WaoFixtures.java b/wao-services/src/test/java/fr/ifremer/wao/services/service/WaoFixtures.java new file mode 100644 index 0000000..63e1885 --- /dev/null +++ b/wao-services/src/test/java/fr/ifremer/wao/services/service/WaoFixtures.java @@ -0,0 +1,88 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.WaoTechnicalException; +import fr.ifremer.wao.entity.Company; +import fr.ifremer.wao.entity.CompanyTopiaDao; +import fr.ifremer.wao.entity.ObsProgram; +import fr.ifremer.wao.entity.UserProfile; +import fr.ifremer.wao.entity.UserProfileImpl; +import fr.ifremer.wao.entity.UserRole; +import fr.ifremer.wao.entity.WaoUser; +import fr.ifremer.wao.entity.WaoUserImpl; +import fr.ifremer.wao.services.AuthenticatedWaoUser; +import fr.ifremer.wao.services.WaoServiceContext; +import fr.ifremer.wao.services.service.administration.ReferentialService; +import org.apache.commons.io.IOUtils; + +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +public class WaoFixtures { + + protected WaoServiceContext serviceContext; + + protected Map<String, Company> companies = new HashMap<>(); + + public WaoFixtures(WaoServiceContext serviceContext) { + this.serviceContext = serviceContext; + } + + protected Company getCompany(String companyName) { + Company company = companies.get(companyName); + if (company == null) { + CompanyTopiaDao companyDao = serviceContext.getPersistenceContext().getCompanyDao(); + company = companyDao.create( + Company.PROPERTY_NAME, companyName, + Company.PROPERTY_ACTIVE, true); + companies.put(companyName, company); + serviceContext.getPersistenceContext().commit(); + } + return company; + } + + protected AuthenticatedWaoUser newAuthenticatedWaoUser(String login, ObsProgram obsProgram, UserRole userRole) { + WaoUser waoUser = new WaoUserImpl(); + waoUser.setOrganisation(ifremer()); + waoUser.setLogin(login); + waoUser.setActive(true); + UserProfile userProfile = new UserProfileImpl(); + userProfile.setUserRole(userRole); + userProfile.setObsProgram(obsProgram); + userProfile.setCanWrite(true); + waoUser.addUserProfile(userProfile); + return new AuthenticatedWaoUser(waoUser, userProfile); + } + + public Company ifremer() { + return getCompany("IFREMER"); + } + + public Company oceanet() { + return getCompany("OCEANET"); + } + + public void fishingZones() { + InputStream input = null; + try { + input = getClass().getResourceAsStream("/import/zonesPeche.csv"); + serviceContext.newService(ReferentialService.class).importFishingZones(input); + } catch (ImportErrorException e) { + throw new WaoTechnicalException(e); + } finally { + IOUtils.closeQuietly(input); + } + } + + public void navires() { + InputStream input = null; + try { + input = getClass().getResourceAsStream("/import/navires.csv"); + serviceContext.newService(ReferentialService.class).importBoats(input); + } catch (ImportErrorException e) { + throw new WaoTechnicalException(e); + } finally { + IOUtils.closeQuietly(input); + } + } +} diff --git a/wao-services/src/test/resources/import/echantillonnage.csv b/wao-services/src/test/resources/import/echantillonnage.csv index beda484..0073eab 100644 --- a/wao-services/src/test/resources/import/echantillonnage.csv +++ b/wao-services/src/test/resources/import/echantillonnage.csv @@ -1,14 +1,14 @@ "PLAN_CODE";"SOCIETE_NOM";"PECHE_DIVISION";"PECHE_AUTRE";"METIER_CODE_DCF5";"METIER_MAILLAGE";"METIER_TAILLE";"METIER_AUTRE";"METIER_LIBELLE";"METIER_ESPECES";"PROGRAMME_CODE";"PROGRAMME_DEBUT";"PROGRAMME_FIN";"12/2009";"01/2010";"02/2010";"03/2010";"04/2010";"05/2010";"06/2010";"07/2010";"08/2010";"09/2010";"10/2010";"11/2010";"12/2010";"01/2011";"02/2011";"03/2011";"PLAN_DUREE_MOY";"PLAN_NB_OBSERV";"PLAN_COMMENT";"TAUX_COUVERTURE_APPLIQUE" -"2010_M0001";"Ifremer";"IId,I";;"DRB_ALG";;;;;;"MA-2009";"03/2010";"01/2011";;;;0;0;0;0;0;0;0;2;0;0;4;;;"1.5";1;"Un petit commentaire";5 -"2010_M0002";"Ifremer";"IId";;"DRH_CAT,DRH_CRU";;;;"Fileyage";"poissons tubes";"MANY";"01/2008";"12/2008";;20;0;0;21;0;0;21;0;0;21;0;0;;;;1;1;;5 -"2010_M0003";"Ifremer";"IId,IV";;"DRH";;;;"balottage en plein air";"divers choses visqueuses";"MA-2009";"03/2010";"01/2011";;;;0;22;0;0;25;0;0;21;0;0;25;;;2;1;;5 -"2009_M0001";"Ifremer";"IId,IV";;"GTR_DEF,GNS_DEF";"110-119";;;"Fileyage à poissons tubes";"poissons plats";"PPP2010";"12/2009";"10/2010";0;1;1;1;2;1;1;1;1;1;2;;;;;;1;1;;5 -"2009_M0002";"Ifremer";"IId";;"GTR_DEF,GNS_DEF";"9888-99";;;"Fileyage à sirènes ";"nymphes";"PPP2010";"12/2009";"10/2010";1;1;1;2;3;4;4;4;4;3;3;;;;;;1;1;;10 -"2009_M0003";"Ifremer";"IV";;"GTR_MOL,GNS";;;;"Fileyages à baleines à bosse";"chameaux";"PPP2010";"12/2009";"10/2010";2;2;2;2;2;2;2;2;2;2;4;;;;;;1;1;;10 -"2009_M0004";"Ifremer";"IId";;"PTB_ALG";">=190";">18";;"Chalutage de fond machiavélique";"gadidés; divers";"PPP2010";"12/2009";"10/2010";1;1;1;1;1;1;1;1;1;1;2;;;;;;3;2;;10 -"2009_M0005";"Ifremer";"IId";;"PTB_ALG";"70-1100";">1140";;"Plongeur de fond sous-marin";"gadidés; divers";"PPP2010";"12/2009";"10/2010";1;1;1;1;1;1;1;1;1;1;2;;;;;;3;2;;10 +"2010_M0001";"IFREMER";"IId,I";;"DRB_ALG";;;;;;"MA-2009";"03/2010";"01/2011";;;;0;0;0;0;0;0;0;2;0;0;4;;;"1.5";1;"Un petit commentaire";5 +"2010_M0002";"IFREMER";"IId";;"DRH_CAT,DRH_CRU";;;;"Fileyage";"poissons tubes";"MANY";"01/2008";"12/2008";;20;0;0;21;0;0;21;0;0;21;0;0;;;;1;1;;5 +"2010_M0003";"IFREMER";"IId,IV";;"DRH";;;;"balottage en plein air";"divers choses visqueuses";"MA-2009";"03/2010";"01/2011";;;;0;22;0;0;25;0;0;21;0;0;25;;;2;1;;5 +"2009_M0001";"IFREMER";"IId,IV";;"GTR_DEF,GNS_DEF";"110-119";;;"Fileyage à poissons tubes";"poissons plats";"PPP2010";"12/2009";"10/2010";0;1;1;1;2;1;1;1;1;1;2;;;;;;1;1;;5 +"2009_M0002";"IFREMER";"IId";;"GTR_DEF,GNS_DEF";"9888-99";;;"Fileyage à sirènes ";"nymphes";"PPP2010";"12/2009";"10/2010";1;1;1;2;3;4;4;4;4;3;3;;;;;;1;1;;10 +"2009_M0003";"IFREMER";"IV";;"GTR_MOL,GNS";;;;"Fileyages à baleines à bosse";"chameaux";"PPP2010";"12/2009";"10/2010";2;2;2;2;2;2;2;2;2;2;4;;;;;;1;1;;10 +"2009_M0004";"IFREMER";"IId";;"PTB_ALG";">=190";">18";;"Chalutage de fond machiavélique";"gadidés; divers";"PPP2010";"12/2009";"10/2010";1;1;1;1;1;1;1;1;1;1;2;;;;;;3;2;;10 +"2009_M0005";"IFREMER";"IId";;"PTB_ALG";"70-1100";">1140";;"Plongeur de fond sous-marin";"gadidés; divers";"PPP2010";"12/2009";"10/2010";1;1;1;1;1;1;1;1;1;1;2;;;;;;3;2;;10 "2009_M0006";"OCEANET";"I,IV";;"DRB_DEF";"70-1100";">1140";;"Leon";"poissons plats";"PPP2010";"12/2009";"10/2010";0;1;0;1;0;1;2;2;2;2;1;;;;;;3;2;; -"2010_M0004";"Ifremer";"IId,IV";;"PTB_DEF,PTB_ALG,DRH";;;;"Chalutage de fond";"gadidés; poissons plats; divers";"BLOB";"01/2010";"12/2010";;3;0;0;3;0;0;3;0;0;3;0;0;;;;3;1;; +"2010_M0004";"IFREMER";"IId,IV";;"PTB_DEF,PTB_ALG,DRH";;;;"Chalutage de fond";"gadidés; poissons plats; divers";"BLOB";"01/2010";"12/2010";;3;0;0;3;0;0;3;0;0;3;0;0;;;;3;1;; "2010_M0005";"OCEANET";"IId";;"DRB";;;;"Kamoulox";"merlu; poissons cerises; divers";"MA-2009";"03/2010";"01/2011";;;;0;5;0;0;5;0;0;6;0;0;3;;;3;1;;15 "2010_M0010";"OCEANET";"I,IV";;"DRB";"70-1100";;;"Kamoulox";"merlu; poissons pommes; divers";"MA-2009";"03/2010";"01/2011";;;;0;5;0;0;5;0;0;6;0;0;3;;;3;1;;15 "2010_M0011";"OCEANET";"I,IV";;"DRB_ANA";"70-1100";;;"Troubidou";"merlu; poissons cerises";"MA-2009";"03/2010";"01/2011";;;;0;5;0;0;5;0;0;6;0;0;3;;;3;1;; diff --git a/wao-services/src/test/resources/import/plan-sclerochronologie.csv b/wao-services/src/test/resources/import/plan-sclerochronologie.csv new file mode 100644 index 0000000..e2cdf2c --- /dev/null +++ b/wao-services/src/test/resources/import/plan-sclerochronologie.csv @@ -0,0 +1,6 @@ +PLAN_CODE;ORGANISATION_NOM;PECHE_DIVISION;PECHE_AUTRE;PROGRAMME_CODE;PROGRAMME_DEBUT;PROGRAMME_FIN;PLAN_COMMENT;ESPECE_CIBLE;CONTEXTE;CONTEXTE_COMPLEMENT;MESURES;01/2015;02/2015;03/2015;04/2015;05/2015;06/2015;07/2015;08/2015;09/2015;10/2015;11/2015;12/2015 +2015_S0001;OCEANET;X;;CAMPAGNE_22;01/2015;12/2015;;1644;Échantillonnage en mer;;Poids/Taille/Sexe;200;;100;0;50;;;;;;;12 +2015_S0002;OCEANET;X;;CAMPAGNE_22;01/2015;12/2015;;1644;Échantillonnage en mer;;Poids/Taille/Sexe;;;;0;;;300;300;;;; +2015_S0003;EMH;X;;CAMPAGNE_22;01/2015;12/2015;;1543;Échantillonnage à terre;;Poids/Taille/Sexe/Maturité/Âge;;200;;100;0;50;;100;0;50;; +2015_S0004;EMH;IV;;RECHERCHE;01/2015;12/2015;;1543;Campagne scientifique;;Poids/Taille/Sexe;;;;200;;100;0;50;;;; +2015_S0005;EMH;IV;;RECHERCHE;01/2015;12/2015;;1543;Campagne scientifique;;Poids/Taille;;200;;100;0;50;;;200;;100;0 diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/action/EditSampleRowAction.java b/wao-web/src/main/java/fr/ifremer/wao/web/action/EditSampleRowAction.java index faee62f..814f729 100644 --- a/wao-web/src/main/java/fr/ifremer/wao/web/action/EditSampleRowAction.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/action/EditSampleRowAction.java @@ -29,11 +29,14 @@ import fr.ifremer.wao.entity.SampleMonth; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.services.service.MissingDcf5CodesException; import fr.ifremer.wao.services.service.MissingFishingZonesException; +import fr.ifremer.wao.services.service.MissingIndividualMeasurementStrategyException; import fr.ifremer.wao.services.service.MissingPeriodBeginException; import fr.ifremer.wao.services.service.MissingPeriodEndException; import fr.ifremer.wao.services.service.MissingProfessionSpeciesException; import fr.ifremer.wao.services.service.MissingProgramNameException; import fr.ifremer.wao.services.service.MissingSampleRowLogCommentException; +import fr.ifremer.wao.services.service.MissingSclerochronologySamplingContextException; +import fr.ifremer.wao.services.service.MissingSpeciesException; import fr.ifremer.wao.services.service.NoEffortDefinedException; import fr.ifremer.wao.services.service.ObsMerSamplingPlanService; import fr.ifremer.wao.services.service.SampleMonthWithIllegalExpectedTidesValueException; @@ -126,6 +129,15 @@ public class EditSampleRowAction extends WaoJspActionSupport implements Preparab addFieldError("updateSampleRowCommand.dcf5Codes", t("wao.ui.form.SampleRow.error.noEffortDefined")); } + // TODO brendan 18/12/14 + catch (MissingIndividualMeasurementStrategyException e) { + throw new UnsupportedOperationException(); + } catch (MissingSclerochronologySamplingContextException e) { + throw new UnsupportedOperationException(); + } catch (MissingSpeciesException e) { + throw new UnsupportedOperationException(); + } + } @Override diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/ImportSpeciesAction.java b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/ImportSpeciesAction.java index 88f2b4c..d21b8cc 100644 --- a/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/ImportSpeciesAction.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/action/administration/ImportSpeciesAction.java @@ -4,6 +4,8 @@ import fr.ifremer.wao.services.service.ImportErrorException; import java.io.InputStream; +import static org.nuiton.i18n.I18n.n; + public class ImportSpeciesAction extends AbstractImportReferentialAction { @Override @@ -13,6 +15,6 @@ public class ImportSpeciesAction extends AbstractImportReferentialAction { @Override protected String getSuccessMessage() { - return t("wao.import.species.success"); + return t(n("wao.import.species.success")); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.