Author: bleny Date: 2010-11-26 12:44:45 +0000 (Fri, 26 Nov 2010) New Revision: 803 Log: fix sample row form to allow profession selection ; add DCF5 codes validation Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java 2010-11-26 10:11:05 UTC (rev 802) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java 2010-11-26 12:44:45 UTC (rev 803) @@ -27,16 +27,20 @@ import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoException; import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.SamplingFilter; +import fr.ifremer.wao.bean.SamplingFilterImpl; import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.DCF5Code; +import fr.ifremer.wao.entity.FishingGearDCF; import fr.ifremer.wao.entity.FishingZone; import fr.ifremer.wao.entity.Profession; import fr.ifremer.wao.entity.ProfessionImpl; import fr.ifremer.wao.entity.SampleMonth; import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.SampleRowLog; +import fr.ifremer.wao.entity.TargetSpeciesDCF; import fr.ifremer.wao.service.ServiceBoat; import fr.ifremer.wao.service.ServiceReferential; import fr.ifremer.wao.service.ServiceSampling; @@ -74,6 +78,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.LinkedList; import java.util.List; /** @@ -162,9 +167,9 @@ /** Select model which contains all professions **/ @Persist - private GenericSelectModel<Profession> professionSelectModel; + private GenericSelectModel<SampleRow> professionSelectModel; - /** The current selected professionId **/ + /** The current selected professionId, this is actually a sample row topia Id **/ @Property private String professionId; @@ -182,11 +187,11 @@ * @return a GenericSelectModel<Profession> * @throws WaoException */ - public GenericSelectModel<Profession> getProfessionSelectModel() throws WaoException { + public GenericSelectModel<SampleRow> getProfessionSelectModel() throws WaoException { if (professionSelectModel == null) { - List<Profession> professions = serviceReferential.getProfessions(); - professionSelectModel = new GenericSelectModel<Profession>(professions, Profession.class, - "code", "topiaId", propertyAccess); + List<SampleRow> professions = serviceSampling.getSampleRowsByFilter(new SamplingFilterImpl()); + professionSelectModel = new GenericSelectModel<SampleRow>(professions, SampleRow.class, + "professionDescription", SampleRow.TOPIA_ID, propertyAccess); } return professionSelectModel; } @@ -207,12 +212,15 @@ */ void onSelectedFromAddNewProfession() throws WaoException { Profession profession = new ProfessionImpl(); - if (!StringUtils.isEmpty(professionId)) { - Profession professionSelected = getProfessionSelectModel().findObject(professionId); + if ( ! StringUtils.isEmpty(professionId)) { + SampleRow professionSelected = getProfessionSelectModel().findObject(professionId); if (log.isDebugEnabled()) { - log.debug("Add new profession from : " + professionSelected); + log.debug("add new profession from : " + professionSelected); } - profession = serviceSampling.getNewProfession(professionSelected); + profession = serviceSampling.getNewProfession(professionSelected.getProfession()); + + getSampleRow().setDCF5Code(professionSelected.getDCF5Code()); + dcf5codes = null; } getSampleRow().setProfession(profession); edited = true; @@ -582,6 +590,35 @@ "Vous devez choisir un programme existant ou en créer un nouveau"); } + // validate DCF5 codes + getSampleRow().setDCF5Code(getDcf5codes(), ", "); + if (CollectionUtils.isEmpty(getSampleRow().getDCF5Code())) { + sampleRowForm.recordError("Vous devez associer au moins un code DCF5"); + } else { + // check that codes exist in the reference + SamplingFilter noFilter = new SamplingFilterImpl(); + List<String> existingFishingGearCodes = new LinkedList<String>(); + // filling existingFishingGearCodes + for (FishingGearDCF dcfGear : serviceSampling.getDCFGears(noFilter)) { + existingFishingGearCodes.add(dcfGear.getCode()); + } + List<String> existingTargetSpeciesCodes = new LinkedList<String>(); + for (TargetSpeciesDCF dcfSpecies : serviceSampling.getDCFSpecies(noFilter)) { + existingTargetSpeciesCodes.add(dcfSpecies.getCode()); + } + + + for (DCF5Code code : getSampleRow().getDCF5Code()) { + if ( ! existingFishingGearCodes.contains(code.getFishingGearCode())) { + sampleRowForm.recordError(code.getFishingGearCode() + " n'est pas un code d'engin valide"); + } + if (code.getTargetSpeciesCode() != null && + ! existingTargetSpeciesCodes.contains(code.getTargetSpeciesCode())) { + sampleRowForm.recordError(code.getTargetSpeciesCode() + " n'est pas un code d'espèces cibles valide"); + } + } + } + Date periodBegin = getSampleRow().getPeriodBegin(); Date periodEnd = getSampleRow().getPeriodEnd();