[Suiviobsmer-commits] r1306 - in trunk: wao-business/src/main/java/fr/ifremer/wao wao-business/src/main/java/fr/ifremer/wao/bean wao-business/src/main/java/fr/ifremer/wao/entity wao-business/src/main/java/fr/ifremer/wao/io/csv2/models wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/main/resources/i18n wao-business/src/main/xmi wao-business/src/test/java/fr/ifremer/wao wao-business/src/test/java/fr/ifremer/wao/business wao-business/src/test/java/fr/ifremer/wao/entity wao-business/src/test/
Author: bleny Date: 2011-05-31 13:35:20 +0000 (Tue, 31 May 2011) New Revision: 1306 Log: add regionalization of the phone call sampling plan ; refactor ObsDeb tests Added: trunk/wao-business/src/test/java/fr/ifremer/wao/business/ trunk/wao-business/src/test/java/fr/ifremer/wao/business/AbstractBusinessTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebFieldWorkTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebFixtures.java trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebPhoneTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/AbstractServiceTest.java Removed: trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/WaoUtilsTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebFixtures.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterValuesImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialLocationImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportExportModel.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/resources/i18n/wao-business_fr_FR.properties trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceCartographyImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceUserImplTest.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoQueryBuilder.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -25,6 +25,7 @@ import fr.ifremer.wao.bean.ContactState; import fr.ifremer.wao.bean.DataReliability; import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.bean.ObservationType; import fr.ifremer.wao.bean.SamplingFilter; import fr.ifremer.wao.bean.UserFilter; import fr.ifremer.wao.entity.Company; @@ -391,7 +392,16 @@ } if (filter.getRegionIfremer() != null) { - query.addEquals(sampleRowProperty.observationUnitProperty().regionIfremer(), filter.getRegionIfremer()); + String regionIfremerProperty; + if (filter.getExpectedObservationType() == + ObservationType.FIELD_WORK_OBSERVATION) { + regionIfremerProperty = sampleRowProperty. + observationUnitProperty(). + regionIfremer(); + } else { + regionIfremerProperty = sampleRowProperty.terrestrialLocation(); + } + query.addEquals(regionIfremerProperty, filter.getRegionIfremer()); } // XXX 2011 04 12 using UserFilter#observer for both samplingfilter and Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterValuesImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterValuesImpl.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/SamplingFilterValuesImpl.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -131,12 +131,14 @@ addCompanies(sampleRow.getCompany()); if (ObsProgram.OBSDEB.equals(obsProgram)) { addAllObservers(sampleRow.getObservers()); - TerrestrialDivision observationUnit = sampleRow.getObservationUnit(); - if (observationUnit != null) { + if (sampleRow.isFieldWorkObservation()) { + TerrestrialDivision observationUnit = sampleRow.getObservationUnit(); addObservationUnits(observationUnit); addSkillZone(observationUnit); addSubPopulation(observationUnit); addRegionIfremers(observationUnit.getRegionIfremer()); + } else { + addRegionIfremers(sampleRow.getTerrestrialLocation()); } } else { // for both ObsMer and ObsVente Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialLocationImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialLocationImpl.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialLocationImpl.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -57,6 +57,12 @@ return isDistrict; } + @Override + public boolean isRegion() { + boolean isRegion = getLocationType() == LocationType.REGION; + return isRegion; + } + /** Get a description of the location like « Maracaibo (Port, Venezuela) » * */ Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportExportModel.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportExportModel.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportExportModel.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -28,6 +28,7 @@ import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.SampleRowImpl; import fr.ifremer.wao.entity.TerrestrialDivision; +import fr.ifremer.wao.entity.TerrestrialLocation; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.io.csv2.Common; import fr.ifremer.wao.io.csv2.ExportableColumn; @@ -38,6 +39,7 @@ import fr.ifremer.wao.io.csv2.ValueParserFormatter; import fr.ifremer.wao.io.csv2.models.operations.BoatParserFormatter; import fr.ifremer.wao.io.csv2.models.operations.CompanyParserFormatter; +import fr.ifremer.wao.io.csv2.models.operations.RegionValueParserFormatter; import fr.ifremer.wao.io.csv2.models.operations.UsersParserFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,7 +58,6 @@ private static final Logger log = LoggerFactory.getLogger(SamplingPlanImportExportModel.class); - static class ObservationUnitParserFormatter implements ValueParserFormatter<TerrestrialDivision> { /** Index Region code -> UO Code -> Terrestrial division. */ @@ -155,6 +156,8 @@ protected List<Boat> allActiveBoats; + protected List<TerrestrialLocation> allRegions; + protected ConnectedUser connectedUser; protected ModelBuilder<SampleRow> modelBuilder; @@ -167,12 +170,17 @@ /** Constructor used for import */ public SamplingPlanImportExportModel(ConnectedUser connectedUser, - List<TerrestrialDivision> observationUnits, List<WaoUser> allWaoUsers, List<Company> allCompanies, List<Boat> allActiveBoats) { + List<TerrestrialDivision> observationUnits, + List<WaoUser> allWaoUsers, + List<Company> allCompanies, + List<Boat> allActiveBoats, + List<TerrestrialLocation> allRegions) { this.connectedUser = connectedUser; this.allWaoUsers = allWaoUsers; this.observationUnits = observationUnits; this.allCompanies = allCompanies; this.allActiveBoats = allActiveBoats; + this.allRegions = allRegions; } /** Constructor used for export */ @@ -247,6 +255,10 @@ new Common.BooleanParserFormatter(false, false)); } else if (observationType == ObservationType.PHONE_CALL) { modelBuilder.newColumnForImportExport( + "REGION_IFREMER", + SampleRow.PROPERTY_TERRESTRIAL_LOCATION, + new RegionValueParserFormatter(allRegions)); + modelBuilder.newColumnForImportExport( "OBSERVATION_DATE", SampleRow.PROPERTY_EXPECTED_DATE, Common.WEEK); 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-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -691,7 +691,12 @@ } @Override - protected List<ObsDebCode> executeGetAllObsDebCodes(TopiaContext transaction) throws Exception { + protected List<ObsDebCode> executeGetAllObsDebCodes( + TopiaContext transaction, TerrestrialLocation region) + throws Exception { + if ( ! region.isRegion()) { + throw new IllegalArgumentException(); + } ObsDebCodeDAO dao = WaoDAOHelper.getObsDebCodeDAO(transaction); List<ObsDebCode> allObsDebCodes = dao.findAll(); return allObsDebCodes; 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-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -39,6 +39,7 @@ import fr.ifremer.wao.bean.ConnectedUser; import fr.ifremer.wao.bean.FacadeRow; import fr.ifremer.wao.bean.FacadeRowImpl; +import fr.ifremer.wao.bean.LocationType; import fr.ifremer.wao.bean.ObsProgram; import fr.ifremer.wao.bean.ObservationType; import fr.ifremer.wao.bean.SamplingFilter; @@ -77,6 +78,7 @@ import fr.ifremer.wao.entity.TerrestrialDivision; import fr.ifremer.wao.entity.TerrestrialDivisionDAO; import fr.ifremer.wao.entity.TerrestrialLocation; +import fr.ifremer.wao.entity.TerrestrialLocationDAO; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.entity.WaoUserDAO; import fr.ifremer.wao.io.ImportRefusedException; @@ -384,6 +386,7 @@ SampleRow.PROPERTY_GROUP_NAME, SampleRow.PROPERTY_OBSERVERS, SampleRow.PROPERTY_OBSERVATION_UNIT, + SampleRow.PROPERTY_TERRESTRIAL_LOCATION, SampleRow.PROPERTY_BLANK_ROW); } else { oldRow.clearSampleMonth(); @@ -1068,8 +1071,19 @@ BoatDAO boatDAO = WaoDAOHelper.getBoatDAO(transaction); List<Boat> allActiveBoats = boatDAO.findAllByActive(true); + TerrestrialLocationDAO terrestrialLocationDAO = + WaoDAOHelper.getTerrestrialLocationDAO(transaction); + + List<TerrestrialLocation> allRegions = terrestrialLocationDAO. + findAllByLocationTypeOrdinal(LocationType.REGION.ordinal()); + ImportModel<SampleRow> samplingPlanImportModel = - new SamplingPlanImportExportModel(connectedUser, observationUnits, waoUsers, allCompanies, allActiveBoats); + new SamplingPlanImportExportModel(connectedUser, + observationUnits, + waoUsers, + allCompanies, + allActiveBoats, + allRegions); try { Import<SampleRow> samplingPlanImport = new Import<SampleRow>(samplingPlanImportModel, input); Modified: trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-05-31 13:35:20 UTC (rev 1306) @@ -1,179 +1,179 @@ ContactPieChartConstant.OTHER=Autres -ContactPieChartConstant.REALIZED=R\u00e9alis\u00e9s -ContactPieChartConstant.REFUSED=Refus\u00e9s -ContactState.CONTACT_DEFINITELY_REFUSED=Refus d\u00e9finitif +ContactPieChartConstant.REALIZED=Réalisés +ContactPieChartConstant.REFUSED=Refusés +ContactState.CONTACT_DEFINITELY_REFUSED=Refus définitif ContactState.CONTACT_REFUSED=Refus ContactState.CONTACT_START=Contact pris -ContactState.OBSERVATION_CANCELLED=Annul\u00e9e -ContactState.OBSERVATION_DONE=Observation r\u00e9alis\u00e9e -ContactState.OBSERVATION_EXPECTED=Observation programm\u00e9e -ContactState.OBSERVATION_NOT_DONE=Non observ\u00e9 -DataReliability.CORRECTION_ASKED=Correction demand\u00e9e +ContactState.OBSERVATION_CANCELLED=Annulée +ContactState.OBSERVATION_DONE=Observation réalisée +ContactState.OBSERVATION_EXPECTED=Observation programmée +ContactState.OBSERVATION_NOT_DONE=Non observé +DataReliability.CORRECTION_ASKED=Correction demandée DataReliability.DOUBTFUL=Douteuse -DataReliability.NOT_PROVIDED=Non contr\u00f4l\u00e9e +DataReliability.NOT_PROVIDED=Non contrôlée DataReliability.NOT_RELIABLE=Non exploitable DataReliability.RELIABLE=Exploitable DataReliability.UNKNOWN=Inconnue -GlobalIndicatorValue.BAD=P\u00e9nalit\u00e9 de niveau 1 +GlobalIndicatorValue.BAD=Pénalité de niveau 1 GlobalIndicatorValue.GOOD=Bonus de niveau 1 GlobalIndicatorValue.NEUTRAL=Conforme au cahier des charges -GlobalIndicatorValue.VERY_BAD=P\u00e9nalit\u00e9 de niveau 2 +GlobalIndicatorValue.VERY_BAD=Pénalité de niveau 2 GlobalIndicatorValue.VERY_GOOD=Bonus de niveau 2 -LocationType.AUCTION=Cri\u00e9e +LocationType.AUCTION=Criée LocationType.DISTRICT=Quartier maritime LocationType.PORT=Port -LocationType.REGION=R\u00e9gion Ifremer +LocationType.REGION=Région Ifremer ObsProgram.OBSDEB=ObsDeb ObsProgram.OBSMER=ObsMer ObsProgram.OBSVENTE=ObsVente ObservationType.FIELD_WORK_OBSERVATION=Observation de terrain -ObservationType.FIELD_WORK_SURVEY=Enqu\u00eate de terrain -ObservationType.PHONE_CALL=Enqu\u00eate t\u00e9l\u00e9phonique -SamplingStrategy.SIMULTANEOUS_ALL_SPECIES=Simultan\u00e9 \: Toutes esp\u00e8ces commerciales -SamplingStrategy.SIMULTANEOUS_G1_G2_SPECIES=Simultan\u00e9 \: esp\u00e8ces G1+G2 -SamplingStrategy.SIMULTANEOUS_G1_SPECIES=Simultan\u00e9 \: esp\u00e8ces G1 -SamplingStrategy.SPECIFIC_STOCK=Stock sp\u00e9cifique -SynthesisId.DISTINCT_BOATS_COUNTS=Nombres de navires distincts observ\u00e9s -SynthesisId.GRAPH_BOARDING=Taux d'embarquement sur un m\u00eame navire conforme aux exigences -SynthesisId.GRAPH_SAMPLING=Taux de r\u00e9alisation du plan d'\u00e9chantillonage -SynthesisId.IND_ALLEGRO_REACTIVITY=D\u00e9lais de transmission des donn\u00e9es -SynthesisId.IND_COMPLIANCE_BOARDING=Respect du nombre d'observateurs embarqu\u00e9s -SynthesisId.IND_CONTACT_STATE=\u00c9tats des contacts -SynthesisId.IND_DATA_RELIABILITY=Qualit\u00e9 de la donn\u00e9e -SynthesisId.OBSERVATION_HOUR=Heures d'observation dans la journ\u00e9e +ObservationType.FIELD_WORK_SURVEY=Enquête de terrain +ObservationType.PHONE_CALL=Enquête téléphonique +SamplingStrategy.SIMULTANEOUS_ALL_SPECIES=Simultané \: Toutes espèces commerciales +SamplingStrategy.SIMULTANEOUS_G1_G2_SPECIES=Simultané \: espèces G1+G2 +SamplingStrategy.SIMULTANEOUS_G1_SPECIES=Simultané \: espèces G1 +SamplingStrategy.SPECIFIC_STOCK=Stock spécifique +SynthesisId.DISTINCT_BOATS_COUNTS=Nombres de navires distincts observés +SynthesisId.GRAPH_BOARDING=Taux d'embarquement sur un même navire conforme aux exigences +SynthesisId.GRAPH_SAMPLING=Taux de réalisation du plan d'échantillonage +SynthesisId.IND_ALLEGRO_REACTIVITY=Délais de transmission des données +SynthesisId.IND_COMPLIANCE_BOARDING=Respect du nombre d'observateurs embarqués +SynthesisId.IND_CONTACT_STATE=États des contacts +SynthesisId.IND_DATA_RELIABILITY=Qualité de la donnée +SynthesisId.OBSERVATION_HOUR=Heures d'observation dans la journée UserRole.ADMIN=Administrateur UserRole.COORDINATOR=Coordinateur -UserRole.GUEST=Invit\u00e9 +UserRole.GUEST=Invité UserRole.OBSERVER=Observateur UserRole.PROFESSIONAL=Professionnel csv.import.error.missingMandatoryHeaders=Les champs obligatoires %s sont manquants -csv.import.error.unableToParseValue=Erreur lors de l'interpr\u00e9tation de la valeur '%s' (colonne '%s', ligne %s) -csv.import.error.unableToReadField=Impossible de lire la colonne '%s' \u00e0 la ligne %s +csv.import.error.unableToParseValue=Erreur lors de l'interprétation de la valeur '%s' (colonne '%s', ligne %s) +csv.import.error.unableToReadField=Impossible de lire la colonne '%s' à la ligne %s csv.import.error.unableToReadLine=Impossible de lire la ligne %s -csv.import.error.unableToSetValue=Impossible d'enregistrer la valeur '%s' (entit\u00e9 '%s', ligne %s, column '%s') +csv.import.error.unableToSetValue=Impossible d'enregistrer la valeur '%s' (entité '%s', ligne %s, column '%s') csv.import.error.unrecognizedHeaders=Les champs %s ne sont pas reconnus. Les champs possibles sont %s. csv.import.logComment=Modification depuis import -fr.ifremer.wao.entity.FishingGearDCF.=Non sp\u00e9cifi\u00e9 -fr.ifremer.wao.entity.FishingGearDCF.DRB=Dragues remorqu\u00e9es par bateau -fr.ifremer.wao.entity.FishingGearDCF.DRH=Dragues \u00e0 main -fr.ifremer.wao.entity.FishingGearDCF.FAR=Pi\u00e8ges a\u00e9riens -fr.ifremer.wao.entity.FishingGearDCF.FCN=\u00c9perviers -fr.ifremer.wao.entity.FishingGearDCF.FG=Autres engins retombants (non-sp\u00e9cifi\u00e9s) -fr.ifremer.wao.entity.FishingGearDCF.FIX=Pi\u00e8ges (non-sp\u00e9cifi\u00e9s) -fr.ifremer.wao.entity.FishingGearDCF.FPN=Filets-pi\u00e8ges fixes non couverts +fr.ifremer.wao.entity.FishingGearDCF.=Non spécifié +fr.ifremer.wao.entity.FishingGearDCF.DRB=Dragues remorquées par bateau +fr.ifremer.wao.entity.FishingGearDCF.DRH=Dragues à main +fr.ifremer.wao.entity.FishingGearDCF.FAR=Pièges aériens +fr.ifremer.wao.entity.FishingGearDCF.FCN=Éperviers +fr.ifremer.wao.entity.FishingGearDCF.FG=Autres engins retombants (non-spécifiés) +fr.ifremer.wao.entity.FishingGearDCF.FIX=Pièges (non-spécifiés) +fr.ifremer.wao.entity.FishingGearDCF.FPN=Filets-pièges fixes non couverts fr.ifremer.wao.entity.FishingGearDCF.FPO=Nasses (casiers) -fr.ifremer.wao.entity.FishingGearDCF.FSN=Filets \u00e0 l'\u00e9talage (diables) +fr.ifremer.wao.entity.FishingGearDCF.FSN=Filets à l'étalage (diables) fr.ifremer.wao.entity.FishingGearDCF.FWR=Barrages, parcs, bordigues, etc. fr.ifremer.wao.entity.FishingGearDCF.FYK=Verveux -fr.ifremer.wao.entity.FishingGearDCF.GEN=Filets maillants et filets emm\u00e9lants (non sp\u00e9cifi\u00e9s) -fr.ifremer.wao.entity.FishingGearDCF.GES=Tamis \u00e0 civelles -fr.ifremer.wao.entity.FishingGearDCF.GN=Filets maillants (non sp\u00e9cifi\u00e9s) +fr.ifremer.wao.entity.FishingGearDCF.GEN=Filets maillants et filets emmélants (non spécifiés) +fr.ifremer.wao.entity.FishingGearDCF.GES=Tamis à civelles +fr.ifremer.wao.entity.FishingGearDCF.GN=Filets maillants (non spécifiés) fr.ifremer.wao.entity.FishingGearDCF.GNC=Filets maillants encerclants -fr.ifremer.wao.entity.FishingGearDCF.GND=Filets maillants d\u00e9rivants (filets d\u00e9rivants) +fr.ifremer.wao.entity.FishingGearDCF.GND=Filets maillants dérivants (filets dérivants) fr.ifremer.wao.entity.FishingGearDCF.GNF=Filets maillants fixes (sur perches) -fr.ifremer.wao.entity.FishingGearDCF.GNS=Filets maillants cal\u00e9s (ancr\u00e9s) -fr.ifremer.wao.entity.FishingGearDCF.GT=Tr\u00e9mailleurs -fr.ifremer.wao.entity.FishingGearDCF.GTN=Tr\u00e9mails et filets maillants combin\u00e9s -fr.ifremer.wao.entity.FishingGearDCF.GTR=Tr\u00e9mails +fr.ifremer.wao.entity.FishingGearDCF.GNS=Filets maillants calés (ancrés) +fr.ifremer.wao.entity.FishingGearDCF.GT=Trémailleurs +fr.ifremer.wao.entity.FishingGearDCF.GTN=Trémails et filets maillants combinés +fr.ifremer.wao.entity.FishingGearDCF.GTR=Trémails fr.ifremer.wao.entity.FishingGearDCF.HAR=Harpons -fr.ifremer.wao.entity.FishingGearDCF.HMD=Dragues m\u00e9canis\u00e9es +fr.ifremer.wao.entity.FishingGearDCF.HMD=Dragues mécanisées fr.ifremer.wao.entity.FishingGearDCF.HMP=Pompes -fr.ifremer.wao.entity.FishingGearDCF.HMX=Engins de r\u00e9colte (non sp\u00e9cifi\u00e9s) +fr.ifremer.wao.entity.FishingGearDCF.HMX=Engins de récolte (non spécifiés) fr.ifremer.wao.entity.FishingGearDCF.LA=Filets tournants sans coulisse (filet lamparo) -fr.ifremer.wao.entity.FishingGearDCF.LHM=Lignes \u00e0 main et lignes avec cannes -fr.ifremer.wao.entity.FishingGearDCF.LHP=Lignes \u00e0 main et lignes \u00e0 cannes -fr.ifremer.wao.entity.FishingGearDCF.LL=Palangres (non sp\u00e9cifi\u00e9es) -fr.ifremer.wao.entity.FishingGearDCF.LLD=Palangres d\u00e9rivantes -fr.ifremer.wao.entity.FishingGearDCF.LLS=Palangres cal\u00e9es ou semi-flottantes -fr.ifremer.wao.entity.FishingGearDCF.LN=Filets soulev\u00e9s (non sp\u00e9cifi\u00e9s) -fr.ifremer.wao.entity.FishingGearDCF.LNB=Filets soulev\u00e9s man\u0153uvr\u00e9es du bateau -fr.ifremer.wao.entity.FishingGearDCF.LNP=Filets soulev\u00e9s portatifs -fr.ifremer.wao.entity.FishingGearDCF.LNS=Filets soulev\u00e9s fixes man\u0153uvr\u00e9es du rivage -fr.ifremer.wao.entity.FishingGearDCF.LTL=lignes de tra\u00eene -fr.ifremer.wao.entity.FishingGearDCF.LX=Hame\u00e7ons et lignes (non sp\u00e9cifi\u00e9s) +fr.ifremer.wao.entity.FishingGearDCF.LHM=Lignes à main et lignes avec cannes +fr.ifremer.wao.entity.FishingGearDCF.LHP=Lignes à main et lignes à cannes +fr.ifremer.wao.entity.FishingGearDCF.LL=Palangres (non spécifiées) +fr.ifremer.wao.entity.FishingGearDCF.LLD=Palangres dérivantes +fr.ifremer.wao.entity.FishingGearDCF.LLS=Palangres calées ou semi-flottantes +fr.ifremer.wao.entity.FishingGearDCF.LN=Filets soulevés (non spécifiés) +fr.ifremer.wao.entity.FishingGearDCF.LNB=Filets soulevés manœuvrées du bateau +fr.ifremer.wao.entity.FishingGearDCF.LNP=Filets soulevés portatifs +fr.ifremer.wao.entity.FishingGearDCF.LNS=Filets soulevés fixes manœuvrées du rivage +fr.ifremer.wao.entity.FishingGearDCF.LTL=lignes de traîne +fr.ifremer.wao.entity.FishingGearDCF.LX=Hameçons et lignes (non spécifiés) fr.ifremer.wao.entity.FishingGearDCF.MIS=Divers -fr.ifremer.wao.entity.FishingGearDCF.NK=Engins inconnus ou non sp\u00e9cifi\u00e9s -fr.ifremer.wao.entity.FishingGearDCF.OT=Chaluts \u00e0 panneaux (non sp\u00e9cifi\u00e9) -fr.ifremer.wao.entity.FishingGearDCF.OTB=Chalut de fond \u00e0 panneaux -fr.ifremer.wao.entity.FishingGearDCF.OTM=Chaluts p\u00e9lagiques \u00e0 panneaux -fr.ifremer.wao.entity.FishingGearDCF.OTT=Chaluts jumeaux \u00e0 panneaux +fr.ifremer.wao.entity.FishingGearDCF.NK=Engins inconnus ou non spécifiés +fr.ifremer.wao.entity.FishingGearDCF.OT=Chaluts à panneaux (non spécifié) +fr.ifremer.wao.entity.FishingGearDCF.OTB=Chalut de fond à panneaux +fr.ifremer.wao.entity.FishingGearDCF.OTM=Chaluts pélagiques à panneaux +fr.ifremer.wao.entity.FishingGearDCF.OTT=Chaluts jumeaux à panneaux fr.ifremer.wao.entity.FishingGearDCF.PS=Filets tournants avec coulisse (sennes coulissantes) -fr.ifremer.wao.entity.FishingGearDCF.PS1=Filets tournants, sennes coulissantes man\u0153uvr\u00e9es par un bateau -fr.ifremer.wao.entity.FishingGearDCF.PS2=Filets tournants, sennes coulissantes man\u0153uvr\u00e9es par deux bateaux -fr.ifremer.wao.entity.FishingGearDCF.PT=Chalut-b\u0153ufs (non sp\u00e9cifi\u00e9) -fr.ifremer.wao.entity.FishingGearDCF.PTB=Chalut-b\u0153ufs de fond -fr.ifremer.wao.entity.FishingGearDCF.PTM=Chalut-b\u0153ufs p\u00e9lagiques -fr.ifremer.wao.entity.FishingGearDCF.RG=Engins de p\u00eache r\u00e9vr\u00e9ative +fr.ifremer.wao.entity.FishingGearDCF.PS1=Filets tournants, sennes coulissantes manœuvrées par un bateau +fr.ifremer.wao.entity.FishingGearDCF.PS2=Filets tournants, sennes coulissantes manœuvrées par deux bateaux +fr.ifremer.wao.entity.FishingGearDCF.PT=Chalut-bœufs (non spécifié) +fr.ifremer.wao.entity.FishingGearDCF.PTB=Chalut-bœufs de fond +fr.ifremer.wao.entity.FishingGearDCF.PTM=Chalut-bœufs pélagiques +fr.ifremer.wao.entity.FishingGearDCF.RG=Engins de pêche révréative fr.ifremer.wao.entity.FishingGearDCF.SB=Sennes de plages fr.ifremer.wao.entity.FishingGearDCF.SDN=Sennes danoises -fr.ifremer.wao.entity.FishingGearDCF.SPR=Sennes man\u0153uvr\u00e9es par deux bateaux -fr.ifremer.wao.entity.FishingGearDCF.SSC=Sennes \u00e9cossaises -fr.ifremer.wao.entity.FishingGearDCF.SV=Sennes hal\u00e9es \u00e0 bord -fr.ifremer.wao.entity.FishingGearDCF.SW=Sennes (non sp\u00e9cifi\u00e9es) -fr.ifremer.wao.entity.FishingGearDCF.TB=Chalut de fond (non sp\u00e9cifi\u00e9) -fr.ifremer.wao.entity.FishingGearDCF.TBB=Chaluts \u00e0 perche -fr.ifremer.wao.entity.FishingGearDCF.TBN=Chalut \u00e0 langoustines -fr.ifremer.wao.entity.FishingGearDCF.TBS=Chalut \u00e0 crevettes -fr.ifremer.wao.entity.FishingGearDCF.TM=Chalut p\u00e9lagique (non sp\u00e9cifi\u00e9) -fr.ifremer.wao.entity.FishingGearDCF.TMS=Chalut \u00e0 crevettes -fr.ifremer.wao.entity.FishingGearDCF.TX=Autre chalut (non sp\u00e9cifi\u00e9) -fr.ifremer.wao.entity.TargetSpeciesDCF.=Non sp\u00e9cifi\u00e9 +fr.ifremer.wao.entity.FishingGearDCF.SPR=Sennes manœuvrées par deux bateaux +fr.ifremer.wao.entity.FishingGearDCF.SSC=Sennes écossaises +fr.ifremer.wao.entity.FishingGearDCF.SV=Sennes halées à bord +fr.ifremer.wao.entity.FishingGearDCF.SW=Sennes (non spécifiées) +fr.ifremer.wao.entity.FishingGearDCF.TB=Chalut de fond (non spécifié) +fr.ifremer.wao.entity.FishingGearDCF.TBB=Chaluts à perche +fr.ifremer.wao.entity.FishingGearDCF.TBN=Chalut à langoustines +fr.ifremer.wao.entity.FishingGearDCF.TBS=Chalut à crevettes +fr.ifremer.wao.entity.FishingGearDCF.TM=Chalut pélagique (non spécifié) +fr.ifremer.wao.entity.FishingGearDCF.TMS=Chalut à crevettes +fr.ifremer.wao.entity.FishingGearDCF.TX=Autre chalut (non spécifié) +fr.ifremer.wao.entity.TargetSpeciesDCF.=Non spécifié fr.ifremer.wao.entity.TargetSpeciesDCF.ALG=Algues -fr.ifremer.wao.entity.TargetSpeciesDCF.CAT=Esp\u00e8ces catadromes -fr.ifremer.wao.entity.TargetSpeciesDCF.CRU=Crustac\u00e9s +fr.ifremer.wao.entity.TargetSpeciesDCF.CAT=Espèces catadromes +fr.ifremer.wao.entity.TargetSpeciesDCF.CRU=Crustacés fr.ifremer.wao.entity.TargetSpeciesDCF.CSJ=Coquilles Saint-Jacques -fr.ifremer.wao.entity.TargetSpeciesDCF.DEF=Esp\u00e8ces d\u00e9mersales -fr.ifremer.wao.entity.TargetSpeciesDCF.DWS=Esp\u00e8ces d'eaux profondes +fr.ifremer.wao.entity.TargetSpeciesDCF.DEF=Espèces démersales +fr.ifremer.wao.entity.TargetSpeciesDCF.DWS=Espèces d'eaux profondes fr.ifremer.wao.entity.TargetSpeciesDCF.FIN=Poisson plats -fr.ifremer.wao.entity.TargetSpeciesDCF.LPF=Grands p\u00e9lagiques +fr.ifremer.wao.entity.TargetSpeciesDCF.LPF=Grands pélagiques fr.ifremer.wao.entity.TargetSpeciesDCF.MOL=Mollusques -fr.ifremer.wao.entity.TargetSpeciesDCF.SPF=Petits p\u00e9lagiques -wao.business.boat.validation.immatriculation.wrongFormat=L'immatriculation du navire doit \u00eatre form\u00e9e de 6 chiffres -wao.business.contact.validation.commentAdminNecessaryForDataReliability=Il faut pr\u00e9ciser dans le commentaire administrateur pourquoi la donn\u00e9e est '%s' -wao.business.contact.validation.dataReliabilityMissingForValidation=Il faut pr\u00e9ciser la qualit\u00e9 de la donn\u00e9e avant de valider +fr.ifremer.wao.entity.TargetSpeciesDCF.SPF=Petits pélagiques +wao.business.boat.validation.immatriculation.wrongFormat=L'immatriculation du navire doit être formée de 6 chiffres +wao.business.contact.validation.commentAdminNecessaryForDataReliability=Il faut préciser dans le commentaire administrateur pourquoi la donnée est '%s' +wao.business.contact.validation.dataReliabilityMissingForValidation=Il faut préciser la qualité de la donnée avant de valider wao.business.entity.UserProfile.description=%s sur %s%s -wao.business.mammalsCapture.mail.message=Bonjour,\n\nUn observateur du programme Obsmer a renseign\u00e9 dans WAO l'information suivante \:\n\nMar\u00e9e \: %s\nM\u00e9tier \: %s\n\nCapture accidentelle \:\n%s\n\nCordialement,\n\nLe programme Obsmer\nhttp\://www.ifremer.fr/wao +wao.business.mammalsCapture.mail.message=Bonjour,\n\nUn observateur du programme Obsmer a renseigné dans WAO l'information suivante \:\n\nMarée \: %s\nMétier \: %s\n\nCapture accidentelle \:\n%s\n\nCordialement,\n\nLe programme Obsmer\nhttp\://www.ifremer.fr/wao wao.business.mammalsCapture.mail.subject=Obsmer WAO\: Information sur capture accidentelle wao.business.other=Autre wao.business.readOnly=(lecture seule) -wao.error.boat.canCreateContact=Impossible de cr\u00e9er un nouveau contact pour la soci\u00e9t\u00e9 %1$s et le navire %2$s (%3$d) -wao.error.boat.getNbBoarding=Impossible de r\u00e9cup\u00e9rer le nombre d'embarquements r\u00e9els depuis le %1$s -wao.error.boatInfos.getNbBoardingForCompany=Impossible de r\u00e9cup\u00e9rer le nombre d'embarquements r\u00e9els depuis le %1$s pour la soci\u00e9t\u00e9 %2$s +wao.error.boat.canCreateContact=Impossible de créer un nouveau contact pour la société %1$s et le navire %2$s (%3$d) +wao.error.boat.getNbBoarding=Impossible de récupérer le nombre d'embarquements réels depuis le %1$s +wao.error.boatInfos.getNbBoardingForCompany=Impossible de récupérer le nombre d'embarquements réels depuis le %1$s pour la société %2$s wao.error.context.close=Une erreur est survenue pendant la fermeture du contexte principale de ToPIA wao.error.context.encodeString= -wao.error.context.getRootContext=Une erreur est survenue pour la r\u00e9cup\u00e9ration du contexte principale de ToPIA +wao.error.context.getRootContext=Une erreur est survenue pour la récupération du contexte principale de ToPIA wao.error.context.parse=Une erreur est survenue pendant le chargement de la configuration du fichier %1$s wao.error.context.rollback=Une erreur est survenue pendant l'annulation de la transaction courante -wao.error.context.start=Une erreur est survenue pendant le d\u00e9marrage de l'application +wao.error.context.start=Une erreur est survenue pendant le démarrage de l'application wao.error.context.stop=Une erreur est survenue pendant la fermeture de l'application -wao.error.sampleMonth.addRealTideTime=Impossible d'enregistrer le nombre de mar\u00e9es r\u00e9els pour le mois de %1$s [ligne \: %2$s] -wao.error.sampleRow.saveSampleRowLog=Impossible d'enregistrer le commentaire \u00e9crit par %1$s -wao.error.serviceBoat.createUpdateCompanyBoatInfos=Impossible de cr\u00e9er ou modifier les informations li\u00e9s au navire %1$d pour la soci\u00e9t\u00e9 %2$s -wao.error.serviceBoat.exportBoatCsv=Impossible d'exporter les navires s\u00e9lectionn\u00e9s +wao.error.sampleMonth.addRealTideTime=Impossible d'enregistrer le nombre de marées réels pour le mois de %1$s [ligne \: %2$s] +wao.error.sampleRow.saveSampleRowLog=Impossible d'enregistrer le commentaire écrit par %1$s +wao.error.serviceBoat.createUpdateCompanyBoatInfos=Impossible de créer ou modifier les informations liés au navire %1$d pour la société %2$s +wao.error.serviceBoat.exportBoatCsv=Impossible d'exporter les navires sélectionnés wao.error.serviceBoat.getActivityCalendarLogAccessFile= wao.error.serviceBoat.getActivityCalendarLogFile= wao.error.serviceBoat.getAllActiveBoats= wao.error.serviceBoat.getBoat=Impossible de charger le navire -wao.error.serviceBoat.getBoatNamesStartWith=Impossible de r\u00e9cup\u00e9rer les navires avec un nom commencant par '%1$s' +wao.error.serviceBoat.getBoatNamesStartWith=Impossible de récupérer les navires avec un nom commencant par '%1$s' wao.error.serviceBoat.getBoatsByFilter=Impossible de filtrer la liste des navires -wao.error.serviceBoat.getBoatsByImmatriculations=La cha\u00eene d'immatriculations est incorrect \! Chaque immatriculation doit poss\u00e9der 6 chiffres -wao.error.serviceBoat.getCompanyBoatInfos=Impossible de r\u00e9cup\u00e9rer les informations du navire immatricul\u00e9 %1$d pour la soci\u00e9t\u00e9 %2$s -wao.error.serviceBoat.getLastActivityCalendar=Impossible de charger le dernier calendrier d'activit\u00e9 du navire %1$s (%2$d) +wao.error.serviceBoat.getBoatsByImmatriculations=La chaîne d'immatriculations est incorrect \! Chaque immatriculation doit posséder 6 chiffres +wao.error.serviceBoat.getCompanyBoatInfos=Impossible de récupérer les informations du navire immatriculé %1$d pour la société %2$s +wao.error.serviceBoat.getLastActivityCalendar=Impossible de charger le dernier calendrier d'activité du navire %1$s (%2$d) wao.error.serviceBoat.getNbBoatsByFilter=Impossible de filtrer la liste des navires wao.error.serviceBoat.getPossibleValuesForFilter= wao.error.serviceBoat.getShipOwnerNamesContains= -wao.error.serviceBoat.importActivityCalendarCsv=Probl\u00e8me d'import du fichier CSV des calendriers d'activit\u00e9 -wao.error.serviceBoat.importBoatCsv=Probl\u00e8me d'import du fichier CSV. V\u00e9rifiez l'en-t\u00eate du fichier. +wao.error.serviceBoat.importActivityCalendarCsv=Problème d'import du fichier CSV des calendriers d'activité +wao.error.serviceBoat.importBoatCsv=Problème d'import du fichier CSV. Vérifiez l'en-tête du fichier. wao.error.serviceBoat.newBoatFilter= wao.error.serviceCartography.exportContactMotifsStatisticsKml= wao.error.serviceCartography.exportContactStatisticsKml= -wao.error.serviceCartography.importBoatDistrictKml=Impossible d'importer les coordonn\u00e9es des quartiers des navires. V\u00e9rifiez la documentation pour le bon format du fichier Kml. +wao.error.serviceCartography.importBoatDistrictKml=Impossible d'importer les coordonnées des quartiers des navires. Vérifiez la documentation pour le bon format du fichier Kml. wao.error.serviceChart.getContactPieChartData= wao.error.serviceChart.getContactPieChartUrl= wao.error.serviceContact.exportContactCsv=Impossible d'exporter les contacts wao.error.serviceContact.getContact=Impossible de trouver le contact wao.error.serviceContact.getContacts=Impossible de filtrer la liste des contacts -wao.error.serviceContact.getNbContacts=Impossible de compter le nombre de contacts filtr\u00e9s +wao.error.serviceContact.getNbContacts=Impossible de compter le nombre de contacts filtrés wao.error.serviceContact.getNewContact=Impossible d'instancier un nouveau contact wao.error.serviceContact.getPossibleValuesForFilter= wao.error.serviceContact.getSubstitutesForBoat= @@ -185,7 +185,7 @@ wao.error.serviceContact.updateSampleMonthTidesValue= wao.error.serviceContact.validateContact= wao.error.serviceNews.getNewNews= -wao.error.serviceNews.getNews=Impossible de r\u00e9cup\u00e9rer l'ensemble des news +wao.error.serviceNews.getNews=Impossible de récupérer l'ensemble des news wao.error.serviceNews.saveNews=Impossible d'enregistrer la news ayant pour titre '%1$s' wao.error.serviceReferential.getAllContactStateMotifs= wao.error.serviceReferential.getAllObsDebCodes= @@ -195,13 +195,13 @@ wao.error.serviceReferential.getAllTerrestrialLocations= wao.error.serviceReferential.getCodesDCF5Contains= wao.error.serviceReferential.getFacades=Impossible de charger la liste des facades -wao.error.serviceReferential.getFishingZones=Impossible de charger la liste des secteurs de p\u00eache -wao.error.serviceReferential.getProfessions=Impossible de charger la liste des m\u00e9tiers -wao.error.serviceReferential.getSectors=Impossible de charger la liste des zones de p\u00eache +wao.error.serviceReferential.getFishingZones=Impossible de charger la liste des secteurs de pêche +wao.error.serviceReferential.getProfessions=Impossible de charger la liste des métiers +wao.error.serviceReferential.getSectors=Impossible de charger la liste des zones de pêche wao.error.serviceReferential.getTerrestrialDistrict= wao.error.serviceReferential.importContactStateMotifs= -wao.error.serviceReferential.importDCFcodes=Impossible de cr\u00e9er le r\u00e9f\u00e9rentiel des codes DCF -wao.error.serviceReferential.importFishingZoneCsv=Probl\u00e8me d'import du fichier CSV. V\u00e9rifiez l'en-t\u00eate du fichier \: [ PECHE_DIVISION,PECHE_ZONE,PECHE_FACADE ]. Voir documentation pour plus de d\u00e9tails. +wao.error.serviceReferential.importDCFcodes=Impossible de créer le référentiel des codes DCF +wao.error.serviceReferential.importFishingZoneCsv=Problème d'import du fichier CSV. Vérifiez l'en-tête du fichier \: [ PECHE_DIVISION,PECHE_ZONE,PECHE_FACADE ]. Voir documentation pour plus de détails. wao.error.serviceReferential.importInitialContactStateMotifs= wao.error.serviceReferential.importObsDebCodes= wao.error.serviceReferential.importTerrestrialDivisions= @@ -210,72 +210,72 @@ wao.error.serviceReferential.updateAllContactStatesMotifs= wao.error.serviceSampling.countSampleRows= wao.error.serviceSampling.createSampleRowLog= -wao.error.serviceSampling.createUpdateSampleRow=Impossible de sauvegarder la ligne d'\u00e9chantillon -wao.error.serviceSampling.deleteSampleRow=Impossible de supprimer la ligne d'\u00e9chantillon \: %1$s -wao.error.serviceSampling.exportSamplingPlanCsv=Impossible d'exporter le plan d'\u00e9chantillonnage sur la p\u00e9riode du %1$s au %2$s +wao.error.serviceSampling.createUpdateSampleRow=Impossible de sauvegarder la ligne d'échantillon +wao.error.serviceSampling.deleteSampleRow=Impossible de supprimer la ligne d'échantillon \: %1$s +wao.error.serviceSampling.exportSamplingPlanCsv=Impossible d'exporter le plan d'échantillonnage sur la période du %1$s au %2$s wao.error.serviceSampling.exportSamplingPlanICalendar= wao.error.serviceSampling.getDCFGears= wao.error.serviceSampling.getDCFSpecies= wao.error.serviceSampling.getNewProfession= wao.error.serviceSampling.getNewSampleMonth= wao.error.serviceSampling.getNewSampleRow= -wao.error.serviceSampling.getNewSampleRowCode=Impossible de r\u00e9cup\u00e9rer un nouveau code pour une ligne d'\u00e9chantillonnage +wao.error.serviceSampling.getNewSampleRowCode=Impossible de récupérer un nouveau code pour une ligne d'échantillonnage wao.error.serviceSampling.getNewSampleRowLog= wao.error.serviceSampling.getPossibleValuesForFilter= wao.error.serviceSampling.getPrograms=Impossible de charger la liste des programmes -wao.error.serviceSampling.getSampleRow=Impossible de charger la ligne d'\u00e9chantillon ayant pour identifiant \: %1$s -wao.error.serviceSampling.getSampleRowByCode=Impossible de charger la ligne d'\u00e9chantillon ayant pour code %1$s -wao.error.serviceSampling.getSampleRowsByFilter=Impossible de r\u00e9cup\u00e9rer la liste des lignes du plan d'\u00e9chantillonnage +wao.error.serviceSampling.getSampleRow=Impossible de charger la ligne d'échantillon ayant pour identifiant \: %1$s +wao.error.serviceSampling.getSampleRowByCode=Impossible de charger la ligne d'échantillon ayant pour code %1$s +wao.error.serviceSampling.getSampleRowsByFilter=Impossible de récupérer la liste des lignes du plan d'échantillonnage wao.error.serviceSampling.getSampleRowsForEligibility= -wao.error.serviceSampling.getSampleRowsOrderedByFishingZone=Impossible de r\u00e9cup\u00e9rer la liste des lignes du plan d'\u00e9chantillonnage +wao.error.serviceSampling.getSampleRowsOrderedByFishingZone=Impossible de récupérer la liste des lignes du plan d'échantillonnage wao.error.serviceSampling.importSamplingPlanCsv=Erreur lors de l'import du plan wao.error.serviceSampling.newOperation= wao.error.serviceSampling.newSampleRow= wao.error.serviceSampling.newSamplingFilter= wao.error.serviceSampling.validateSampleRow= wao.error.serviceSynthesis.getAllIndicatorLogs= -wao.error.serviceSynthesis.getBoardingBoats=Impossible de r\u00e9cup\u00e9rer les donn\u00e9es du graphique concernant les embarquements sur les navires +wao.error.serviceSynthesis.getBoardingBoats=Impossible de récupérer les données du graphique concernant les embarquements sur les navires wao.error.serviceSynthesis.getBoatsCount= wao.error.serviceSynthesis.getComplianceBoardingIndicator= -wao.error.serviceSynthesis.getContactDataInputDateReactivity=Impossible de r\u00e9cup\u00e9rer l'indicateur de r\u00e9activit\u00e9 sur les dates de saisies dans Allegro +wao.error.serviceSynthesis.getContactDataInputDateReactivity=Impossible de récupérer l'indicateur de réactivité sur les dates de saisies dans Allegro wao.error.serviceSynthesis.getContactPieChartData= wao.error.serviceSynthesis.getContactPieChartDataByBoatDistrict= wao.error.serviceSynthesis.getContactStateMotifsPieChartDataByBoatDistrict= -wao.error.serviceSynthesis.getContactStateStatistics=Impossible de r\u00e9cup\u00e9rer les statistiques sur les \u00e9tats des contacts +wao.error.serviceSynthesis.getContactStateStatistics=Impossible de récupérer les statistiques sur les états des contacts wao.error.serviceSynthesis.getDataReliability= -wao.error.serviceSynthesis.getDataSampling=Impossible de r\u00e9cup\u00e9rer les donn\u00e9es pour le graphique dynamique des efforts de mar\u00e9es +wao.error.serviceSynthesis.getDataSampling=Impossible de récupérer les données pour le graphique dynamique des efforts de marées wao.error.serviceSynthesis.getDistinctBoatsCounts= -wao.error.serviceSynthesis.getGlobalSynthesisParameters=Impossible de r\u00e9cup\u00e9rer les donn\u00e9es concernant les indicateurs pour la synth\u00e8se globale +wao.error.serviceSynthesis.getGlobalSynthesisParameters=Impossible de récupérer les données concernant les indicateurs pour la synthèse globale wao.error.serviceSynthesis.getGlobalSynthesisResult= -wao.error.serviceSynthesis.getNonComplianceBoardingIndicator=Impossible de r\u00e9cup\u00e9rer l'indicateur de non respect du nombre d'observateurs embarqu\u00e9s +wao.error.serviceSynthesis.getNonComplianceBoardingIndicator=Impossible de récupérer l'indicateur de non respect du nombre d'observateurs embarqués wao.error.serviceSynthesis.getObservationHours= -wao.error.serviceSynthesis.updateGlobalSynthesisParameters=Impossible de mettre \u00e0 jour les param\u00e8tres de la synth\u00e8se globale +wao.error.serviceSynthesis.updateGlobalSynthesisParameters=Impossible de mettre à jour les paramètres de la synthèse globale wao.error.serviceUser.addTokensToAllProfiles= wao.error.serviceUser.connect=Une erreur est survenue lors de la demande de connexion -wao.error.serviceUser.createDefaultAdmin=Impossible de cr\u00e9er l'administrateur par d\u00e9faut -wao.error.serviceUser.createUpdateCompany=Impossible de cr\u00e9er ou de mettre \u00e0 jour la soci\u00e9t\u00e9 -wao.error.serviceUser.createUpdateUser=Impossible de cr\u00e9er ou de mettre \u00e0 jour l'utilisateur -wao.error.serviceUser.deleteCompany=Impossible de supprimer la soci\u00e9t\u00e9 ou de v\u00e9rifier les contraintes de suppression +wao.error.serviceUser.createDefaultAdmin=Impossible de créer l'administrateur par défaut +wao.error.serviceUser.createUpdateCompany=Impossible de créer ou de mettre à jour la société +wao.error.serviceUser.createUpdateUser=Impossible de créer ou de mettre à jour l'utilisateur +wao.error.serviceUser.deleteCompany=Impossible de supprimer la société ou de vérifier les contraintes de suppression wao.error.serviceUser.deleteUser=Impossible de supprimer l'utilisateur wao.error.serviceUser.existLogin= wao.error.serviceUser.forgetPassword=Impossible d'envoyer le mail d'oubli de mot de passe -wao.error.serviceUser.getCompanies=Impossible de r\u00e9cup\u00e9rer la liste des soci\u00e9t\u00e9s +wao.error.serviceUser.getCompanies=Impossible de récupérer la liste des sociétés wao.error.serviceUser.getCompany= wao.error.serviceUser.getConnectedUserByToken= wao.error.serviceUser.getNewUser=Impossible d'instancier un nouvel utilisateur -wao.error.serviceUser.getObservers=Impossible de r\u00e9cup\u00e9rer la liste des observateurs +wao.error.serviceUser.getObservers=Impossible de récupérer la liste des observateurs wao.error.serviceUser.getUserByToken= wao.error.serviceUser.getUserRolesByLogin= -wao.error.serviceUser.getUsersByCompany=Impossible de r\u00e9cup\u00e9rer la liste des utilisateurs de la soci\u00e9t\u00e9 %1$s +wao.error.serviceUser.getUsersByCompany=Impossible de récupérer la liste des utilisateurs de la société %1$s wao.export.ical.desc=avec %s wao.export.ical.title=Observation ObsDeb -wao.import.contact.failure.boatMissing=Il faut pr\u00e9ciser l'immatriculation du navire associ\u00e9 au contact -wao.import.contact.failure.locationTypeMissing=Le type du lieu doit \u00eatre renseign\u00e9 -wao.import.contact.failure.sampleRowCodeMissing=Il manque le code de la ligne de plan associ\u00e9e +wao.import.contact.failure.boatMissing=Il faut préciser l'immatriculation du navire associé au contact +wao.import.contact.failure.locationTypeMissing=Le type du lieu doit être renseigné +wao.import.contact.failure.sampleRowCodeMissing=Il manque le code de la ligne de plan associée wao.import.contact.failure.terrestrialLocationMissing=Il manque le code du lieu wao.import.contact.failure.wrongBoat=Il n'y a pas de navire avec l'immatriculation '%s' wao.import.contact.failure.wrongSampleRowCode=Il n'y a pas de ligne du plan avec le code '%s' wao.import.contact.failure.wrongTerrestrialLocation=Il n'y a pas de lieu de type '%s' ayant pour code '%s' -wao.import.failure.wrongObsDebCode=Il n'y a pas de code m\u00e9tier ayant pour code '%s' +wao.import.failure.wrongObsDebCode=Il n'y a pas de code métier ayant pour code '%s' wao.import.failure.wrongUser=Il n'y a pas d'utilisateur ayant pour identifiant '%s' -wao.validation.sampleRow.conflictOnObserver=L'observateur %s ne peut \u00eatre associ\u00e9 \u00e0 la ligne %s car il doit observer, le m\u00eame jour, pour la ligne %s +wao.validation.sampleRow.conflictOnObserver=L'observateur %s ne peut être associé à la ligne %s car il doit observer, le même jour, pour la ligne %s Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Deleted: trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -1,661 +0,0 @@ -/* - * #%L - * Wao :: Business - * %% - * Copyright (C) 2009 - 2010 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% - */ - -package fr.ifremer.wao; - -import fr.ifremer.wao.bean.ConnectedUser; -import fr.ifremer.wao.bean.ConnectedUserImpl; -import fr.ifremer.wao.bean.ContactState; -import fr.ifremer.wao.bean.ObsProgram; -import fr.ifremer.wao.bean.UserRole; -import fr.ifremer.wao.entity.Boat; -import fr.ifremer.wao.entity.BoatDAO; -import fr.ifremer.wao.entity.Company; -import fr.ifremer.wao.entity.CompanyDAO; -import fr.ifremer.wao.entity.Contact; -import fr.ifremer.wao.entity.ContactDAO; -import fr.ifremer.wao.entity.ContactImpl; -import fr.ifremer.wao.entity.ElligibleBoat; -import fr.ifremer.wao.entity.ElligibleBoatDAO; -import fr.ifremer.wao.entity.SampleRow; -import fr.ifremer.wao.entity.SampleRowDAO; -import fr.ifremer.wao.entity.UserProfileImpl; -import fr.ifremer.wao.entity.WaoUser; -import fr.ifremer.wao.entity.WaoUserDAO; -import fr.ifremer.wao.entity.WaoUserImpl; -import fr.ifremer.wao.service.ServiceBoat; -import fr.ifremer.wao.service.ServiceContact; -import fr.ifremer.wao.service.ServiceReferential; -import fr.ifremer.wao.service.ServiceSampling; -import fr.ifremer.wao.service.ServiceSamplingImpl; -import org.junit.After; -import org.junit.Before; -import org.junit.BeforeClass; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; -import org.nuiton.util.DateUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.InputStream; -import java.util.Date; -import java.util.List; - -/** - * AbstractServiceTest - * - * Created: 29 avr. 2010 - * - * @author fdesbois - */ -public abstract class AbstractServiceTest { - - private static final Logger log = - LoggerFactory.getLogger(AbstractServiceTest.class); - - protected static TestManager manager; - - protected ServiceSamplingImpl serviceSampling; - - protected static final String BOAT_DEFAULT_NAME = "SPRINGFIELD"; - protected static final int BOAT_DEFAULT_IMMATRICULATION = 123456; - protected static final String SAMPLE_ROW_DEFAULT_CODE = "2010_0001"; - protected static final String COMPANY_DEFAULT_NAME = "TARTANPION"; - protected static final String OBSERVER_DEFAULT_FIRST_NAME = "Homer"; - protected static final String OBSERVER_DEFAULT_LAST_NAME = "Simpson"; - protected static final String OBSERVER_DEFAULT_LOGIN = "homer"; - - @BeforeClass - public static void setUpClass() throws Exception { - // Create tmpdir if not exist - String tmpdir = System.getProperty("java.io.tmpdir"); - File file = new File(tmpdir); - if (!file.exists()) { - boolean b = file.mkdirs(); - if (!b) { - if (log.isWarnEnabled()) - log.warn("Could not create tmp directory : " + file); - } - if (log.isInfoEnabled()) { - log.info("tmp dir : " + file + " was created"); - } - } - manager = new TestManager(); - } - - @Before - public void setUp() throws Exception { - if (log.isDebugEnabled()) { - log.debug("Start manager"); - } - manager.start(); - serviceSampling = (ServiceSamplingImpl) manager.getServiceSampling(); - } - - @After - public void tearDown() throws Exception { - manager.stop(); - } - - /** - * Create a company : <br /> - * <ul> - * <li>first name : Homer</li> - * <li>last name : Simpson</li> - * <li>login : homer</li> - * <li>company : ref to TARTANPION</li> - * <li>role : OBSERVER</li> - * </ul> - * - * @return the new Company - * @throws TopiaException - */ - protected WaoUser createDefaultObserver() throws TopiaException { - TopiaContext transaction = manager.getContext().beginTransaction(); - WaoUser observer = null; - try { - WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction); - observer = userDAO.create( - WaoUser.PROPERTY_COMPANY, findDefaultCompany(), - WaoUser.PROPERTY_LOGIN, OBSERVER_DEFAULT_LOGIN, - WaoUser.PROPERTY_FIRST_NAME, OBSERVER_DEFAULT_FIRST_NAME, - WaoUser.PROPERTY_LAST_NAME, OBSERVER_DEFAULT_LAST_NAME); - if (log.isDebugEnabled()) { - log.debug("Create default observer : " + observer); - } - - transaction.commitTransaction(); - } finally { - transaction.closeContext(); - } - return observer; - } - - /** - * Create a user : <br /> - * <ul> - * <li>first name : null</li> - * <li>last name : null</li> - * <li>login : defined with {@code login} argument</li> - * <li>company : defined with {@code company} argument</li> - * <li>role : defined with {@code role} argument</li> - * </ul> - * - * @param login String unique login for the new user - * @param role UserRole of the user - * @param company Company parent of the user - * @return the new WaoUser - * @throws TopiaException - */ - protected WaoUser createUser(String login, UserRole role, - Company company) throws TopiaException { - TopiaContext transaction = manager.getContext().beginTransaction(); - WaoUser observer = null; - try { - WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction); - observer = userDAO.create( - WaoUser.PROPERTY_COMPANY, company, - WaoUser.PROPERTY_LOGIN, login, - WaoUser.PROPERTY_FIRST_NAME, null, - WaoUser.PROPERTY_LAST_NAME, null); - - if (log.isDebugEnabled()) { - log.debug("Create observer : " + observer); - } - - transaction.commitTransaction(); - } finally { - transaction.closeContext(); - } - return observer; - } - - /** - * Create a company : <br /> - * <ul> - * <li>name : TARTANPION</li> - * </ul> - * - * @return the new Company - * @throws TopiaException - */ - protected Company createDefaultCompany() throws TopiaException { - return createCompany(COMPANY_DEFAULT_NAME); - } - - /** - * Create a company : <br /> - * <ul> - * <li>name : defined with {@code name} argument</li> - * </ul> - * - * @param name - * @return the new Company - * @throws TopiaException - */ - protected Company createCompany(String name) throws TopiaException { - Company company = null; - TopiaContext transaction = manager.getContext().beginTransaction(); - try { - CompanyDAO dao = WaoDAOHelper.getCompanyDAO(transaction); - - company = dao.create(); - company.setName(name); - - transaction.commitTransaction(); - } finally { - transaction.closeContext(); - } - - return company; - } - - /** - * Create a default sampleRow : <br /> - * <ul> - * <li>code : 2010_0001</li> - * <li>company : TARTANPION</li> - * </ul> - * - * @return the new SampleRow - * @throws TopiaException - */ - protected SampleRow createDefaultSampleRow() throws TopiaException { - return createSampleRow(SAMPLE_ROW_DEFAULT_CODE, findDefaultCompany()); - } - - /** - * Create a default sampleRow : <br /> - * <ul> - * <li>code : defined with {@code code} argument</li> - * <li>company : defined with {@code company} argument</li> - * </ul> - * - * @param code - * @param company - * @return the new SampleRow - * @throws TopiaException - */ - protected SampleRow createSampleRow(String code, Company company) - throws TopiaException { - SampleRow row = null; - TopiaContext transaction = manager.getContext().beginTransaction(); - try { - SampleRowDAO dao = - WaoDAOHelper.getSampleRowDAO(transaction); - - row = dao.create(); - row.setCode(code); - row.setCompany(company); - if (log.isDebugEnabled()) { - log.debug("Create sampleRow : " + row); - } - - transaction.commitTransaction(); - } finally { - transaction.closeContext(); - } - - return row; - } - - /** - * Create a default boat : <br /> - * <ul> - * <li>immatriculation : 123456</li> - * <li>name : SPRINGFIELD</li> - * <li>active : true</li> - * </ul> - * - * @return the new Boat - * @throws TopiaException - */ - protected Boat createDefaultBoat() throws TopiaException { - return createBoat(123456, "SPRINGFIELD"); - } - - /** - * Create a boat : <br /> - * <ul> - * <li>immatriculation : defined with {@code immatriculation} argument</li> - * <li>name : defined with {@code name} argument</li> - * <li>active : true</li> - * </ul> - * - * @param immatriculation - * @param name - * @return the new Boat - * @throws TopiaException - */ - protected Boat createBoat(int immatriculation, String name) - throws TopiaException { - Boat boat = null; - TopiaContext transaction = manager.getContext().beginTransaction(); - try { - BoatDAO dao = WaoDAOHelper.getBoatDAO(transaction); - - // CREATE - boat = dao.create(); - boat.setImmatriculation(immatriculation); - boat.setName(name); - boat.setActive(true); - if (log.isDebugEnabled()) { - log.debug("Create boat : " + boat); - } - - transaction.commitTransaction(); - - } finally { - transaction.closeContext(); - } - return boat; - } - - /** - * Create an elligibleBoat : <br /> - * <ul> - * <li>sampleRow : defined with {@code row} argument</li> - * <li>boat : defined with {@code boat} argument</li> - * <li>companyActive : true if {@code company} is true, null otherwise</li> - * <li>globalActive : true if {@code company} is false, false otherwise</li> - * </ul> - * - * @param row to set for ElligibleBoat - * @param boat to set for ElligibleBoat - * @param company true for companyActive, false for globalActive - * @return the new ElligibleBoat - * @throws TopiaException - */ - protected ElligibleBoat createElligibleBoat(SampleRow row, Boat boat, - boolean company) throws TopiaException { - - ElligibleBoat elligibleBoat = null; - TopiaContext transaction = manager.getContext().beginTransaction(); - try { - ElligibleBoatDAO dao = - WaoDAOHelper.getElligibleBoatDAO(transaction); - - // CREATE - elligibleBoat = dao.create(); - elligibleBoat.setBoat(boat); - elligibleBoat.setSampleRow(row); - if (company) { - elligibleBoat.setCompanyActive(true); - } else { - elligibleBoat.setGlobalActive(true); - } - transaction.commitTransaction(); - - } finally { - transaction.closeContext(); - } - return elligibleBoat; - } - - /** - * Create a default contact : <br /> - * <ul> - * <li>boat : SPRINGFIELD</li> - * <li>observer : homer</li> - * <li>sampleRow : 2010_0001</li> - * <li>state : CONTACT_START</li> - * <li>companyValidation : null</li> - * <li>programValidation : null</li> - * </ul> - * - * @return the new Contact - * @throws TopiaException - */ - protected Contact createDefaultContact() throws TopiaException { - TopiaContext transaction = manager.getContext().beginTransaction(); - Contact contact = null; - try { - ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); - - // CREATE - contact = dao.create(); - contact.setBoat(findDefaultBoat()); - contact.setContactState(ContactState.CONTACT_START); - contact.setMainObserver(findDefaultObserver()); - contact.setSampleRow(findDefaultSampleRow()); - if (log.isDebugEnabled()) { - log.debug("Create contact : " + contact); - } - - transaction.commitTransaction(); - - } finally { - transaction.closeContext(); - } - return contact; - } - - protected Company findDefaultCompany() throws TopiaException { - Company findCompany = findCompanyByName(BOAT_DEFAULT_NAME); - if (findCompany == null) { - findCompany = createDefaultCompany(); - } - return findCompany; - } - - protected Company findCompanyByName(String name) throws TopiaException { - Company company = null; - TopiaContext transaction = manager.getContext().beginTransaction(); - try { - CompanyDAO dao = WaoDAOHelper.getCompanyDAO(transaction); - - company = dao.findByName(name); - } finally { - transaction.closeContext(); - } - return company; - } - - protected SampleRow findDefaultSampleRow(String... properties) - throws TopiaException { - SampleRow findRow = findSampleRowByCode( - SAMPLE_ROW_DEFAULT_CODE, properties); - - if (findRow == null) { - findRow = createDefaultSampleRow(); - } - return findRow; - } - - /** - * Find a sampleRow existing using his unique {@code code}. Some - * {@code properties} can be added to load them if the sampleRow is - * corretly retrieve. - * - * @param code SampleRow unique code - * @param properties authorized properties : ElligibleBoat - * @return the existing SampleRow if found, null otherwise - * @throws TopiaException - */ - protected SampleRow findSampleRowByCode(String code, String... properties) - throws TopiaException { - SampleRow row = null; - TopiaContext transaction = manager.getContext().beginTransaction(); - try { - SampleRowDAO dao = - WaoDAOHelper.getSampleRowDAO(transaction); - - row = dao.findByCode(code); - if (row != null) { - // Load properties - for (String property : properties) { - if (property.equals(SampleRow.PROPERTY_ELLIGIBLE_BOAT)) { - row.sizeElligibleBoat(); - } - } - } - } finally { - transaction.closeContext(); - } - return row; - } - - protected Boat findDefaultBoat() throws TopiaException { - Boat findBoat = - findBoatByImmatriculation(BOAT_DEFAULT_IMMATRICULATION); - if (findBoat == null) { - findBoat = createDefaultBoat(); - } - return findBoat; - } - - protected Boat findBoatByImmatriculation(int immatriculation) - throws TopiaException { - Boat boat = null; - TopiaContext transaction = manager.getContext().beginTransaction(); - try { - BoatDAO dao = - WaoDAOHelper.getBoatDAO(transaction); - - boat = dao.findByImmatriculation(immatriculation); - } finally { - transaction.closeContext(); - } - return boat; - } - - protected WaoUser findDefaultObserver() throws TopiaException { - WaoUser findObserver = - findUserByLogin(OBSERVER_DEFAULT_LOGIN); - if (findObserver == null) { - findObserver = createDefaultObserver(); - } - return findObserver; - } - - protected WaoUser findUserByLogin(String login) - throws TopiaException { - WaoUser user = null; - TopiaContext transaction = manager.getContext().beginTransaction(); - try { - WaoUserDAO dao = - WaoDAOHelper.getWaoUserDAO(transaction); - - user = dao.findByLogin(login); - // Load company - if (user != null) { - user.getCompany(); - } - } finally { - transaction.closeContext(); - } - return user; - } - - protected void prepareContactsData(Company company1, Company company2) - throws WaoBusinessException, TopiaException { - - manager.setCurrentDate(DateUtil.createDate(5, 10, 2010)); - - InputStream input = getClass().getResourceAsStream("/import/navires.csv"); - ServiceBoat serviceBoat = manager.getServiceBoat(); - serviceBoat.importBoatCsv(input); - List<Boat> boats = serviceBoat.getBoatsByImmatriculations("174258"); - Boat boat = boats.get(0); - - List<Boat> boats2 = serviceBoat.getBoatsByImmatriculations("177474"); - Boat boat2 = boats2.get(0); - - TopiaContext transaction = manager.getContext().beginTransaction(); - - WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction); - WaoUser user = userDAO.create(WaoUser.PROPERTY_FIRST_NAME,"Jean", WaoUser.PROPERTY_LAST_NAME, "Michmuche", - WaoUser.PROPERTY_COMPANY, company1); - company1.addWaoUser(user); - WaoUser user2 = userDAO.create(WaoUser.PROPERTY_FIRST_NAME,"Bill", WaoUser.PROPERTY_LAST_NAME, "Murray", - WaoUser.PROPERTY_COMPANY, company2); - company2.addWaoUser(user2); - - transaction.commitTransaction(); - - input = getClass().getResourceAsStream("/import/zonesPeche.csv"); - ServiceReferential serviceReferential = manager.getServiceReferential(); - serviceReferential.importFishingZoneCsv(input); - - input = getClass().getResourceAsStream("/import/echantillonnage.csv"); - ServiceSampling serviceSampling = manager.getServiceSampling(); - serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); - - SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); - SampleRow row = rowDAO.findByCode("2010_0001"); - SampleRow row2 = rowDAO.findByCode("2009_0006"); - - transaction.closeContext(); - - - ServiceContact serviceContact = manager.getServiceContact(); - - ConnectedUser connectedUser = getConnectedUser(user, UserRole.ADMIN, ObsProgram.OBSMER); - - // Contacts for company TARTANPION - Contact contact1 = new ContactImpl(); - contact1.setBoat(boat); - contact1.setMainObserver(user); - contact1.setSampleRow(row); - contact1.setContactState(ContactState.OBSERVATION_DONE); - Date begin = DateUtil.createDate(3, 3, 2010); - contact1.setObservationBeginDate(begin); - Date end = DateUtil.createDate(4, 3, 2010); - contact1.setObservationEndDate(end); - serviceContact.saveContact(connectedUser, contact1, false); - - Contact contact2 = new ContactImpl(); - contact2.setBoat(boat); - contact2.setMainObserver(user); - contact2.setSampleRow(row); - contact2.setContactState(ContactState.OBSERVATION_DONE); - begin = DateUtil.createDate(3, 10, 2010); - contact2.setObservationBeginDate(begin); - end = DateUtil.createDate(4, 10, 2010); - contact2.setObservationEndDate(end); - serviceContact.saveContact(connectedUser, contact2, false); - - Contact contact3 = new ContactImpl(); - contact3.setBoat(boat); - contact3.setMainObserver(user); - contact3.setSampleRow(row); - contact3.setContactState(ContactState.CONTACT_REFUSED); - begin = DateUtil.createDate(3, 5, 2010); - end = DateUtil.createDate(4, 5, 2010); - contact3.setObservationEndDate(end); - contact3.setTopiaCreateDate(begin); - serviceContact.saveContact(connectedUser, contact3, false); - - // Contacts for company BIS - Contact contact4 = new ContactImpl(); - contact4.setBoat(boat2); - contact4.setMainObserver(user2); - contact4.setSampleRow(row2); - contact4.setContactState(ContactState.OBSERVATION_EXPECTED); - begin = DateUtil.createDate(3, 3, 2010); - end = DateUtil.createDate(4, 3, 2010); - contact4.setObservationEndDate(end); - contact4.setTopiaCreateDate(begin); - serviceContact.saveContact(connectedUser, contact4, false); - - Contact contact5 = new ContactImpl(); - contact5.setBoat(boat2); - contact5.setMainObserver(user2); - contact5.setSampleRow(row2); - contact5.setContactState(ContactState.OBSERVATION_CANCELLED); - begin = DateUtil.createDate(3, 5, 2010); - end = DateUtil.createDate(4, 5, 2010); - contact5.setObservationEndDate(end); - contact5.setTopiaCreateDate(begin); - serviceContact.saveContact(connectedUser, contact5, false); - - // Contact refused by program, will not be in result - Contact contact6 = new ContactImpl(); - contact6.setBoat(boat2); - contact6.setMainObserver(user2); - contact6.setSampleRow(row2); - contact6.setContactState(ContactState.OBSERVATION_CANCELLED); - begin = DateUtil.createDate(3, 3, 2010); - contact6.setTopiaCreateDate(begin); - end = DateUtil.createDate(4, 3, 2010); - contact6.setObservationEndDate(end); - contact6.setValidationProgram(Boolean.FALSE); - serviceContact.saveContact(connectedUser, contact6, false); - } - - public ConnectedUser getConnectedUser(WaoUser user, UserRole userRole, ObsProgram obsProgram) { - ConnectedUser connectedUser = new ConnectedUserImpl(); - if (user == null) { - WaoUser waoUser = new WaoUserImpl(); - connectedUser.setUser(waoUser); - } else { - connectedUser.setUser(user); - } - connectedUser.setProfile(new UserProfileImpl(obsProgram, userRole, true)); - return connectedUser; - } - - public ConnectedUser getConnectedAdmin() { - return getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER); - } - -} Deleted: trunk/wao-business/src/test/java/fr/ifremer/wao/WaoUtilsTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/WaoUtilsTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/WaoUtilsTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -1,138 +0,0 @@ -/* - * #%L - * Wao :: Business - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 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% - */ - -package fr.ifremer.wao; - -import fr.ifremer.wao.entity.Company; -import fr.ifremer.wao.entity.CompanyImpl; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.junit.Assert.assertNotNull; - -/** - * WaoUtilsTest - * - * Created: 27 nov. 2009 - * - * @author fdesbois <fdesbois at codelutin.com> - */ -public class WaoUtilsTest { - - private static TestManager manager; - - private static final Logger log = LoggerFactory.getLogger(WaoUtilsTest.class); - - public WaoUtilsTest() { - manager = new TestManager(); - } - - @BeforeClass - public static void setUpClass() throws Exception { - - } - - @AfterClass - public static void tearDownClass() throws Exception { - - } - - @Before - public void setUp() { - manager.start(); - } - - @After - public void tearDown() { - manager.stop(); - } - - /** - * Test of getTopiaRootContext method, of class WaoUtils. - */ - //@Test - public void testGetTopiaRootContext() throws Exception { - System.out.println("getTopiaRootContext"); - } - - /** - * Test of loadConfiguration method, of class WaoUtils. - */ - //@Test - public void testLoadConfiguration() throws Exception { - System.out.println("loadConfiguration"); - } - - /** - * Test of serviceException method, of class WaoUtils. - */ - //@Test - public void testServiceException() throws Exception { - System.out.println("serviceException"); - } - - /** - * Test of createRandomString method, of class WaoUtils. - */ - //@Test - public void testCreateRandomString() { - System.out.println("createRandomString"); - } - - /** - * Test of encodeString method, of class WaoUtils. - */ - //@Test - public void testEncodeString() { - System.out.println("encodeString"); - } - - /** - * Test of convertId method, of class WaoUtils. - */ - //@Test - public void testConvertId() { - System.out.println("convertId"); - } - - /** - * Test of prepareTopiaId method, of class WaoUtils. - */ - @Test - public void testPrepareTopiaId() { - log.info("prepareTopiaId"); - - Company company = new CompanyImpl(); - - manager.getContext().prepareTopiaId(Company.class, company); - assertNotNull(company.getTopiaId()); - log.debug("topiaId for Company : " + company.getTopiaId()); - } - -} Added: trunk/wao-business/src/test/java/fr/ifremer/wao/business/AbstractBusinessTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/business/AbstractBusinessTest.java (rev 0) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/business/AbstractBusinessTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -0,0 +1,50 @@ +package fr.ifremer.wao.business; + +import fr.ifremer.wao.TestManager; +import fr.ifremer.wao.service.ServiceBoat; +import fr.ifremer.wao.service.ServiceContact; +import fr.ifremer.wao.service.ServiceReferential; +import fr.ifremer.wao.service.ServiceSampling; +import fr.ifremer.wao.service.ServiceSynthesis; +import fr.ifremer.wao.service.ServiceUser; +import org.junit.After; +import org.junit.Before; + +/** + * Business tests are integration tests that check services implementation + * consistency among a given set of data. + * + * Any service may be involved, tests consider all services as white-boxes, + * ignoring DAOs, persistence, implementations of the services. + * + * In order to provide common data for the tests, fixtures are provided. + */ +public abstract class AbstractBusinessTest { + + protected TestManager manager; + protected ServiceUser serviceUser; + protected ServiceReferential serviceReferential; + protected ServiceBoat serviceBoat; + protected ServiceSampling serviceSampling; + protected ServiceSynthesis serviceSynthesis; + protected ServiceContact serviceContact; + + @Before + public void before() { + manager = new TestManager(); + manager.start(); + + serviceUser = manager.getServiceUser(); + serviceReferential = manager.getServiceReferential(); + serviceBoat = manager.getServiceBoat(); + serviceSampling = manager.getServiceSampling(); + serviceContact = manager.getServiceContact(); + serviceSynthesis = manager.getServiceSynthesis(); + } + + @After + public void after() { + manager.stop(); + } + +} Copied: trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebFieldWorkTest.java (from rev 1290, trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java) =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebFieldWorkTest.java (rev 0) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebFieldWorkTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -0,0 +1,474 @@ +/* + * #%L + * Wao :: Business + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2011 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% + */ +package fr.ifremer.wao.business; + +import fr.ifremer.wao.WaoBusinessException; +import fr.ifremer.wao.bean.BoatFilter; +import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.ContactFilter; +import fr.ifremer.wao.bean.ContactState; +import fr.ifremer.wao.bean.ContactStateStatistics; +import fr.ifremer.wao.bean.ObservationType; +import fr.ifremer.wao.bean.SamplingFilter; +import fr.ifremer.wao.bean.SamplingFilterValues; +import fr.ifremer.wao.bean.ValidationResult; +import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.entity.Contact; +import fr.ifremer.wao.entity.ObsDebCode; +import fr.ifremer.wao.entity.SampleRow; +import fr.ifremer.wao.entity.TerrestrialDivision; +import fr.ifremer.wao.entity.TerrestrialLocation; +import fr.ifremer.wao.io.ImportResults; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.nuiton.util.DateUtil; +import org.nuiton.util.PeriodDates; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * + * + * @author bleny + */ +public class ObsDebFieldWorkTest extends AbstractBusinessTest { + + private static final Logger log = + LoggerFactory.getLogger(ObsDebFieldWorkTest.class); + + protected static final String SAMPLING_PLAN_CSV = + "PLAN_CODE;SOCIETE;REGION_IFREMER_COD;OBSERVATEUR_COD;OBSERVATION_DATE;UNITE_OBSERVATION_COD;OBSERVATEURS;LIGNE_SANS_CONTACTS\n" + + "2011_888;Ifremer;GA;OBS1;05/01/2010;UO007;;N\n" + + "2011_889;Code Lutin;MA;OBS2;25/02/2010;UO087;;N\n" + + "2011_890;Code Lutin;GA;OBS1;13/02/2010;UO007;;N\n" + + "2011_891;Code Lutin;MA;OBS2;13/02/2010;UO087;;N"; + protected static final String SAMPLING_PLAN_WITH_OBSERVERS_CSV = + "PLAN_CODE;REGION_IFREMER_COD;OBSERVATEUR_COD;OBSERVATION_DATE;UNITE_OBSERVATION_COD;OBSERVATEURS;LIGNE_SANS_CONTACTS\n" + + "2011_890;GA;OBS1;13/02/2010;UO007;josh;N"; + + protected ObsDebFixtures fixtures; + + @Before + public void setUpFixtures() { + fixtures = new ObsDebFixtures(manager); + } + + /** + * As an admin, i must be able to import terrestrial divisions + */ + @Test + public void adminCanImportTerrestrialDivisions() { + // as an admin, i can import terrestrial divisions, i should not + // raise any exception + InputStream input = getClass().getResourceAsStream("/import/purifiedTerrestrialDivisions.csv"); + serviceReferential.importTerrestrialDivisions(input); + + // i can read what was imported + List<TerrestrialDivision> observationsUnits = serviceReferential.getAllObservationUnits(); + Assert.assertEquals(243, observationsUnits.size()); + } + + /** + * As an admin, i must be able to import a sampling plan + * @throws WaoBusinessException if import fail + */ + @Test + public void adminCanImportSamplingPlan() throws WaoBusinessException { + adminCanImportTerrestrialDivisions(); + + // First create add two companies in Wao + manager.setCurrentDate(2, 1, 2010); + + fixtures.ifremer(); + fixtures.codeLutin(); + + // Then, import the sampling plan + manager.setCurrentDate(3, 1, 2010); + + InputStream input = IOUtils.toInputStream(SAMPLING_PLAN_CSV); + ImportResults importResults = serviceSampling.importSamplingPlanCsv(input, fixtures.joshAsAdministrator()); + Assert.assertEquals(4, importResults.getNbRowsImported()); + Assert.assertEquals(0, importResults.getNbRowsRefused()); + } + + /** + * As an admin, i should be able to read sampling plan + * @throws WaoBusinessException if a call to service fail + */ + @Test + public void adminCanReadSamplingPlan() throws WaoBusinessException { + + // given a sampling plan + adminCanImportSamplingPlan(); + + // as an administrator, i can get the sampling plan + + // Since a new filter may be initialized for a period of time, + // we set the current date to be deterministic, at this date + // filter returned must be quite large to make 2 sample rows + // non filtered + manager.setCurrentDate(DateUtil.createDate(25, 1, 2010)); + + SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsAdministrator()); + + if (log.isDebugEnabled()) { + log.debug("a new empty sampling filter is " + samplingFilter.toString()); + } + + List<SampleRow> sampleRows = serviceSampling.getSampleRowsByFilter(samplingFilter); + + if (log.isDebugEnabled()) { + log.debug(sampleRows.toString()); + } + // as an admin, i can see all the sample-rows for all companies + Assert.assertEquals(4, sampleRows.size()); + + for (SampleRow sampleRow : sampleRows) { + // i must be able to read those values without error + sampleRow.getObservationUnit().getObservationUnitCode(); + sampleRow.getExpectedDate(); + sampleRow.getGroupName(); + sampleRow.getCompany().getName(); + + // all the rows have a code + Assert.assertTrue(StringUtils.isNotEmpty(sampleRow.getCode())); + } + } + + @Test + public void usersCanFilterSamplingPlan() throws WaoBusinessException { + + // given a sampling plan + adminCanImportSamplingPlan(); + + // i can filter the sampling plan by getting a filter + SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsAdministrator()); + + // and the possible values i can use to fill the filter + SamplingFilterValues samplingFilterValues = serviceSampling.getPossibleValuesForFilter(samplingFilter); + + // according to the given sampling plan, there may be as many different values + // as different values used in the sampling plan, for example : two + // companies are used in the sampling plan so, 2 companies must be in + // the possible values + Assert.assertEquals(2, samplingFilterValues.getCompanies().size()); + Assert.assertEquals(4, samplingFilterValues.getSampleRows().size()); + Assert.assertEquals(2, samplingFilterValues.getObservationUnits().size()); + Assert.assertEquals(0, samplingFilterValues.getObservers().size()); + + samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsAdministrator()); + samplingFilter.setPeriod(new PeriodDates(DateUtil.createDate(20, 2, 2010), + DateUtil.createDate(27, 2, 2010))); + + if (log.isDebugEnabled()) { + log.debug("sampling filter for admin with period is " + samplingFilter.toString()); + } + + // service should have returned the line with date 25/02/2010 + List<SampleRow> sampleRows = serviceSampling.getSampleRowsByFilter(samplingFilter); + Assert.assertEquals(1, sampleRows.size()); + Assert.assertEquals("2011_889", sampleRows.get(0).getCode()); + } + + /** + * As an admin, i should be able to read sampling plan + * @throws WaoBusinessException if call to service fail + */ + @Test + public void coordinatorCanReadSamplingPlan() throws WaoBusinessException { + + // given a sampling plan + adminCanImportSamplingPlan(); + + // as a coordinator, i can get the sampling plan + manager.setCurrentDate(DateUtil.createDate(25, 1, 2010)); + + SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsCoordinator()); + + if (log.isDebugEnabled()) { + log.debug("a new empty sampling filter for coordinator is " + samplingFilter.toString()); + } + + List<SampleRow> sampleRows = serviceSampling.getSampleRowsByFilter(samplingFilter); + + if (log.isDebugEnabled()) { + log.debug(sampleRows.toString()); + } + // as an coordinator, i can see all sample-rows only for my company + Assert.assertEquals(3, sampleRows.size()); + } + + @Test + public void coordinatorCanAddObserversViaImport() throws WaoBusinessException, IOException { + + // given a sampling plan + adminCanImportSamplingPlan(); + + // as a coordinator, i can export the sampling plan + SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsCoordinator()); + samplingFilter.setExpectedObservationType(ObservationType.FIELD_WORK_OBSERVATION); + InputStream input = serviceSampling.exportSamplingPlanCsv(fixtures.joshAsCoordinator(), samplingFilter); + + String csv = IOUtils.toString(input); + + if (log.isDebugEnabled()) { + log.debug("CSV file as it was exported:\n" + csv); + log.debug("CSV file as it will be imported (with observers):\n" + SAMPLING_PLAN_WITH_OBSERVERS_CSV); + } + + // i can add a column to add observers to each line + serviceSampling.importSamplingPlanCsv(IOUtils.toInputStream(SAMPLING_PLAN_WITH_OBSERVERS_CSV), fixtures.joshAsCoordinator()); + + // now getting the sampling plan and checking that observers are linked to sample rows + SampleRow row2011_890 = serviceSampling.getSampleRowByCode(fixtures.joshAsCoordinator(), "2011_890"); + Assert.assertNotNull(row2011_890); + Assert.assertEquals(1, row2011_890.sizeObservers()); + + // adding an observer must add a log entry + Assert.assertEquals(1, row2011_890.sizeSampleRowLog()); + + // the text of the log entry itself + String logEntry = row2011_890.getSampleRowLog().get(0).getLogText(); + + if (log.isDebugEnabled()) { + log.debug("log entry after update on observers is: '" + logEntry + "'"); + } + + Assert.assertTrue("added observer is mentioned in the log", logEntry.contains(fixtures.josh().getFullName())); + } + + /** + * We want to check that the coordinator is not able to create a bad sampling + * plan by sending a same observer on two different place the same day + * @throws WaoBusinessException if call to service fail + * @throws java.io.IOException if failure while reading CSV + */ + @Test + public void coordinatorCannotBreakSamplingPlan() throws IOException, WaoBusinessException { + coordinatorCanAddObserversViaImport(); + + // josh cannot be affected to this row, because on the same day + // he is to be elsewhere + SampleRow row2011_891 = serviceSampling.getSampleRowByCode(fixtures.joshAsCoordinator(), "2011_891"); + row2011_891.addObservers(fixtures.josh()); + + ValidationResult validationResult = serviceSampling.validateSampleRow(row2011_891); + + if (log.isDebugEnabled()) { + log.debug("validation result is " + validationResult.toString()); + } + + Assert.assertFalse("validation must fail", validationResult.isSuccess()); + Assert.assertTrue("message mentions sample row in conflict", + validationResult.getMessage().contains("2011_890")); + } + + @Test + public void observerCanReadSamplingPlan() throws IOException, WaoBusinessException { + // first, the coordinator must add observers + coordinatorCanAddObserversViaImport(); + + // as an observer, i can get the sampling plan + manager.setCurrentDate(DateUtil.createDate(10, 2, 2010)); + + SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsObserver()); + + if (log.isDebugEnabled()) { + log.debug("a new empty sampling filter for observer is " + samplingFilter.toString()); + } + + List<SampleRow> sampleRows = serviceSampling.getSampleRowsByFilter(samplingFilter); + + // as an observer, i can see only the sample-rows the coordinator affected to me + Assert.assertEquals(1, sampleRows.size()); + } + + @Test + public void observerCanExportHisRoadMapAsICalendar() throws IOException, WaoBusinessException { + // first, the coordinator must add observers + coordinatorCanAddObserversViaImport(); + manager.setCurrentDate(DateUtil.createDate(10, 2, 2010)); + + String joshAsObserverToken = fixtures.joshAsObserver().getToken(); + ConnectedUser joshAsObserver = serviceUser.getConnectedUserByToken(joshAsObserverToken); + + InputStream in = serviceSampling.exportSamplingPlanICalendar(joshAsObserver); + + String result = IOUtils.toString(in); + if (log.isDebugEnabled()) { + log.debug("exported iCal for observer is " + result); + } + + Assert.assertEquals(1, StringUtils.countMatches(result, "BEGIN:VEVENT")); + Assert.assertTrue(result.contains("DTSTART;VALUE=DATE:20100213")); + Assert.assertTrue(result.contains("TZID:Europe/Paris")); + Assert.assertTrue(result.contains("LOCATION:GA-UO007 DESHAIES_POINTE NOIRE")); + Assert.assertTrue(result.contains("SUMMARY:Observation ObsDeb")); + } + + @Test + public void observerCanCreateContact() throws IOException, WaoBusinessException { + observerCanReadSamplingPlan(); + + // we are one day after the observation + manager.setCurrentDate(DateUtil.createDate(15, 2, 2010)); + + // the user is supposed to create a contact to tell what he + // has done this day, when i was supposed to observe for this row + SampleRow row = serviceSampling.getSampleRowByCode(fixtures.joshAsObserver(), "2011_890"); + + fixtures.boats(); // boats must be imported + + // observer can get a list of boats given this sample row. It should give him the boats + // having a portOfRegistry in the observation unit of the sample-row + BoatFilter boatFilter = serviceBoat.newBoatFilter(fixtures.joshAsObserver()); + boatFilter.setSampleRow(row); + Map<Integer, Boat> boatsForRow = serviceBoat.getBoatsByFilter(boatFilter); + if (log.isDebugEnabled()) { + log.debug("boats returned after filtering on sample row:" + boatsForRow.values()); + } + Assert.assertEquals(4, boatsForRow.size()); + + Boat boat = boatsForRow.get(fixtures.moise().getImmatriculation()); + + // let's create the contact + Contact contact = serviceContact.getNewContact(fixtures.joshAsObserver(), row, boat); + + // by default, a contact must be of type observation + Assert.assertEquals(ObservationType.FIELD_WORK_OBSERVATION, contact.getObservationType()); + + // in the observation report, i must tell where i was and when + List<TerrestrialLocation> ports = serviceReferential.getAllPorts(contact.getSampleRow().getObservationUnit()); + + if (log.isDebugEnabled()) { + for (TerrestrialLocation port : ports) { + log.debug("possible ports for this contact contains " + port.getDescription()); + } + } + + // i was at this port, from 9:15AM to 10:30AM + contact.setTerrestrialLocation(ports.get(4)); + contact.setObservationBeginDate(DateUtil.createDate(0, 15, 9, 13, 2, 2010)); + contact.setObservationEndDate(DateUtil.createDate(0, 30, 10, 13, 2, 2010)); + + // let's validate + ValidationResult validationResult = serviceContact.validateContact(contact); + + if (log.isDebugEnabled()) { + log.debug("result for contact validation is " + validationResult); + } + + Assert.assertTrue("validation must succeed", validationResult.isSuccess()); + + serviceContact.saveContact(fixtures.joshAsObserver(), contact, false); + + contact = serviceContact.getContact(contact.getTopiaId()); + Assert.assertNotNull("service must have save the data given by observer", contact.getTerrestrialLocation()); + Assert.assertNotNull("service must have save the data given by observer", contact.getObservationBeginDate()); + Assert.assertNotNull("service must have save the data given by observer", contact.getObservationEndDate()); + + // now, i want to create another contact because, at the same + // day, and the same time, i've seen another boat + contact = serviceContact.getNewContact(fixtures.joshAsObserver(), row, fixtures.samourai()); + Assert.assertNotNull("service must have pre filled field", contact.getObservationEndDate()); + Assert.assertNotNull("service must have pre filled field", contact.getTerrestrialLocation()); + + // i've made the survey in this last contact, so i can associate an ObsDebCode + List<ObsDebCode> allObsDebCodes = serviceReferential.getAllObsDebCodes(); + contact.setObsDebCode(allObsDebCodes.get(123)); + serviceContact.saveContact(fixtures.joshAsObserver(), contact, false); + } + + /** Check that coordinator is able to export the contacts created in {@link #observerCanCreateContact()} + * @throws WaoBusinessException + * @throws IOException + */ + @Test + public void coordinatorCanExportContacts() throws IOException, WaoBusinessException { + // first, create two contacts + observerCanCreateContact(); + + manager.setCurrentDate(DateUtil.createDate(16, 2, 2010)); + + ContactFilter filter = serviceContact.newContactFilter(fixtures.joshAsCoordinator()); + InputStream in = serviceContact.exportContactCsv(filter); + + String csv = IOUtils.toString(in); + + if (log.isDebugEnabled()) { + log.debug("csv for contacts exported as coordinator is \n" + csv); + } + + int expectedLineNumber = 1 + 2; // 1 header line + 2 contacts + int actualLineNumber = StringUtils.countMatches(csv, "\n"); + Assert.assertEquals(expectedLineNumber, actualLineNumber); + } + + /** Check that coordinator is able to export the contacts created in {@link #observerCanCreateContact()} */ + @Test + public void coordinatorCanGetSynthesisResults() throws WaoBusinessException, IOException { + observerCanCreateContact(); + + // TODO 20110426 bleny consider validation company and validation program when counting + + SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsCoordinator()); + Map<String, Map<String, Integer>> observationHours = + serviceSynthesis.getObservationHours(samplingFilter); + + Assert.assertEquals(2, observationHours.get("2010").get("09").intValue()); + Assert.assertEquals("24 values associated with '2010', one for each hour of the day", + 24, observationHours.get("2010").size()); + + samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsCoordinator()); + Map<String, Map<String, Integer>> boatsCounts = + serviceSynthesis.getDistinctBoatsCounts(samplingFilter); + Assert.assertEquals("Two distinct boats observed on February 2010", + 2, boatsCounts.get("2010").get("02").intValue()); + Assert.assertEquals("12 values for must be associated to '2010', one for each month", + 12, boatsCounts.get("2010").size()); + + samplingFilter = serviceSampling. + newSamplingFilter(fixtures.joshAsCoordinator()); + Collection<ContactStateStatistics> contactStateStatistics = + serviceSynthesis.getContactStateStatistics(samplingFilter); + for (ContactStateStatistics contactStateStatistic : contactStateStatistics) { + log.debug(contactStateStatistic.getCompanyName() + " -> " + + contactStateStatistic.getData()); + } + ContactStateStatistics contactStateStatistic = contactStateStatistics. + iterator().next(); + Assert.assertEquals("Code Lutin", contactStateStatistic.getCompanyName()); + Assert.assertEquals(2, contactStateStatistic.getData().get + (ContactState.OBSERVATION_DONE).intValue()); + } +} Copied: trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebFixtures.java (from rev 1275, trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebFixtures.java) =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebFixtures.java (rev 0) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebFixtures.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -0,0 +1,146 @@ +package fr.ifremer.wao.business; + +import fr.ifremer.wao.TestManager; +import fr.ifremer.wao.WaoBusinessException; +import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.bean.UserRole; +import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.entity.Company; +import fr.ifremer.wao.entity.CompanyImpl; +import fr.ifremer.wao.entity.UserProfile; +import fr.ifremer.wao.entity.UserProfileImpl; +import fr.ifremer.wao.entity.WaoUser; +import fr.ifremer.wao.entity.WaoUserImpl; +import fr.ifremer.wao.service.ServiceBoat; + +import java.io.InputStream; + +public class ObsDebFixtures { + + protected TestManager manager; + + protected WaoUser josh; + protected Company codeLutin; + protected Company ifremer; + protected Boat moise; + protected Boat samourai; + + protected boolean boatsImported; + + public ObsDebFixtures(TestManager manager) { + this.manager = manager; + } + + public Company codeLutin() { + if (codeLutin == null) { + codeLutin = new CompanyImpl(); + codeLutin.setName("Code Lutin"); + codeLutin.setActive(true); + manager.getServiceUser().createUpdateCompany(codeLutin); + } + return codeLutin; + } + + public Company ifremer() { + if (ifremer == null) { + ifremer = new CompanyImpl(); + ifremer.setName("Ifremer"); + ifremer.setActive(true); + manager.getServiceUser().createUpdateCompany(ifremer); + } + return ifremer; + } + + public void boats() { + if ( ! boatsImported) { + ServiceBoat serviceBoat = manager.getServiceBoat(); + InputStream input = getClass().getResourceAsStream("/import/navires.csv"); + try { + serviceBoat.importBoatCsv(input); + } catch (WaoBusinessException e) { + throw new RuntimeException(e); + } + } + } + + public Boat samourai() { + if (samourai == null) { + boats(); + ServiceBoat serviceBoat = manager.getServiceBoat(); + try { + samourai = serviceBoat.getBoat(174258); + } catch (WaoBusinessException e) { + throw new RuntimeException(e); + } + } + return samourai; + } + + public Boat moise() { + if (moise == null) { + boats(); + ServiceBoat serviceBoat = manager.getServiceBoat(); + try { + moise = serviceBoat.getBoat(273129); + } catch (WaoBusinessException e) { + throw new RuntimeException(e); + } + } + return moise; + } + + public WaoUser josh() { + if (josh == null) { + josh = new WaoUserImpl(); + josh.setLogin("josh"); + josh.setFirstName("Joshua"); + josh.setLastName("B."); + josh.setPassword(manager.getContext().encodeString("mdp")); + josh.setActive(true); + josh.setCompany(codeLutin()); + UserProfile adminProfile = new UserProfileImpl(ObsProgram.OBSDEB, UserRole.ADMIN, true); + UserProfile coordinatorProfile = new UserProfileImpl(ObsProgram.OBSDEB, UserRole.COORDINATOR, true); + UserProfile observerProfile = new UserProfileImpl(ObsProgram.OBSDEB, UserRole.OBSERVER, true); + josh.addUserProfile(adminProfile); + josh.addUserProfile(coordinatorProfile); + josh.addUserProfile(observerProfile); + try { + manager.getServiceUser().createUpdateUser(josh, false); + } catch (WaoBusinessException e) { + throw new RuntimeException(e); + } + josh.setPassword("mdp"); + } + return josh; + } + + protected ConnectedUser joshAs(UserRole userRole) { + // first, log in as josh + ConnectedUser connectedUser = null; + try { + connectedUser = manager.getServiceUser().connect(josh().getLogin(), josh().getPassword()); + } catch (WaoBusinessException e) { + throw new RuntimeException(e); + } + // then choose profile + for (UserProfile userProfile : josh().getUserProfile()) { + if (userProfile.getUserRole() == userRole) { + connectedUser.setProfile(userProfile); + } + } + return connectedUser; + } + + public ConnectedUser joshAsAdministrator() { + return joshAs(UserRole.ADMIN); + } + + public ConnectedUser joshAsCoordinator() { + return joshAs(UserRole.COORDINATOR); + } + + public ConnectedUser joshAsObserver() { + return joshAs(UserRole.OBSERVER); + } +} \ No newline at end of file Added: trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebPhoneTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebPhoneTest.java (rev 0) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/business/ObsDebPhoneTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -0,0 +1,101 @@ +package fr.ifremer.wao.business; + +import fr.ifremer.wao.WaoBusinessException; +import fr.ifremer.wao.bean.ContactState; +import fr.ifremer.wao.bean.ObservationType; +import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.entity.Contact; +import fr.ifremer.wao.entity.ObsDebCode; +import fr.ifremer.wao.entity.SampleRow; +import fr.ifremer.wao.io.ImportResults; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.time.DateUtils; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.nuiton.util.DateUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.InputStream; +import java.util.Date; +import java.util.List; +import java.util.Set; + +public class ObsDebPhoneTest extends AbstractBusinessTest { + + private static final Logger log = + LoggerFactory.getLogger(ObsDebPhoneTest.class); + + protected static final String PHONE_SAMPLING_PLAN_CSV = + "PLAN_CODE;REGION_IFREMER;SOCIETE;OBSERVATEUR_COD;OBSERVATION_DATE;NAVIRE_COD;OBSERVATEURS\n" + + "2011_901;MA;Code Lutin;OBS1;6/2010;174258;"; + + protected ObsDebFixtures fixtures; + + @Before + public void setUpFixtures() { + fixtures = new ObsDebFixtures(manager); + } + + @Test + public void adminCanImportPhoneSamplingPlan() throws WaoBusinessException { + manager.setCurrentDate(2, 1, 2010); + + fixtures.ifremer(); + fixtures.codeLutin(); + fixtures.boats(); + + manager.setCurrentDate(3, 1, 2010); + + InputStream input = IOUtils.toInputStream(PHONE_SAMPLING_PLAN_CSV); + ImportResults importResults = serviceSampling.importSamplingPlanCsv(input, fixtures.joshAsAdministrator()); + Assert.assertEquals(1, importResults.getNbRowsImported()); + Assert.assertEquals(0, importResults.getNbRowsRefused()); + } + + @Test + public void observerCanCreateContactForPhoneSamplingPlan() throws WaoBusinessException { + adminCanImportPhoneSamplingPlan(); + + Date now = DateUtil.createDate(0, 30, 16, 11, 2, 2010); // 11 Feb 2010 at 4:30 PM + manager.setCurrentDate(now); + + // as observer, i can get the sample row i'm working on + SampleRow sampleRow = serviceSampling.getSampleRowByCode(fixtures.joshAsObserver(), "2011_901"); + + // the sample row tell me what boat to call + Boat boatToCall = sampleRow.getBoat(); + + // i can create a contact + Contact firstContact = serviceContact.getNewContact(fixtures.joshAsObserver(), sampleRow, boatToCall); + Assert.assertEquals("Observation type is, by default, a phone call because contact was created from phone sampling plan", + ObservationType.PHONE_CALL, firstContact.getObservationType()); + + // let's suppose the guy refused the survey + firstContact.setObservationBeginDate(now); + firstContact.setObservationEndDate(DateUtils.addMinutes(now, 5)); + firstContact.setContactState(ContactState.CONTACT_REFUSED); + serviceContact.saveContact(fixtures.joshAsObserver(), firstContact, false); + + + // as observer, i can get the substitute for this boat + Set<Boat> substituteBoats = serviceContact.getSubstitutesForBoat(boatToCall); + + if (log.isDebugEnabled()) { + log.debug("substitutes found for boat " + boatToCall + " are " + substituteBoats); + } + + Assert.assertEquals(2, substituteBoats.size()); + + Boat substitute = substituteBoats.iterator().next(); + Contact secondContact = serviceContact.getNewContact(fixtures.joshAsObserver(), sampleRow, substitute); + secondContact.setObservationBeginDate(now); + secondContact.setObservationEndDate(DateUtils.addMinutes(now, 30)); + + // since the guy accepted to answer the survey, i can provide those data + List<ObsDebCode> allObsDebCodes = serviceReferential.getAllObsDebCodes(sampleRow.getTerrestrialLocation()); + secondContact.setObsDebCode(allObsDebCodes.get(234)); + serviceContact.saveContact(fixtures.joshAsObserver(), secondContact, false); + } +} Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -24,7 +24,7 @@ package fr.ifremer.wao.entity; -import fr.ifremer.wao.AbstractServiceTest; +import fr.ifremer.wao.service.AbstractServiceTest; import fr.ifremer.wao.TestManager; import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.bean.ConnectedUser; Copied: trunk/wao-business/src/test/java/fr/ifremer/wao/service/AbstractServiceTest.java (from rev 1275, trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java) =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/AbstractServiceTest.java (rev 0) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/AbstractServiceTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -0,0 +1,659 @@ +/* + * #%L + * Wao :: Business + * %% + * Copyright (C) 2009 - 2010 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% + */ + +package fr.ifremer.wao.service; + +import fr.ifremer.wao.TestManager; +import fr.ifremer.wao.WaoBusinessException; +import fr.ifremer.wao.WaoDAOHelper; +import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.ConnectedUserImpl; +import fr.ifremer.wao.bean.ContactState; +import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.bean.UserRole; +import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.entity.BoatDAO; +import fr.ifremer.wao.entity.Company; +import fr.ifremer.wao.entity.CompanyDAO; +import fr.ifremer.wao.entity.Contact; +import fr.ifremer.wao.entity.ContactDAO; +import fr.ifremer.wao.entity.ContactImpl; +import fr.ifremer.wao.entity.ElligibleBoat; +import fr.ifremer.wao.entity.ElligibleBoatDAO; +import fr.ifremer.wao.entity.SampleRow; +import fr.ifremer.wao.entity.SampleRowDAO; +import fr.ifremer.wao.entity.UserProfileImpl; +import fr.ifremer.wao.entity.WaoUser; +import fr.ifremer.wao.entity.WaoUserDAO; +import fr.ifremer.wao.entity.WaoUserImpl; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; +import org.nuiton.util.DateUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.InputStream; +import java.util.Date; +import java.util.List; + +/** + * AbstractServiceTest + * + * Created: 29 avr. 2010 + * + * @author fdesbois + */ +public abstract class AbstractServiceTest { + + private static final Logger log = + LoggerFactory.getLogger(AbstractServiceTest.class); + + protected static TestManager manager; + + protected ServiceSamplingImpl serviceSampling; + + protected static final String BOAT_DEFAULT_NAME = "SPRINGFIELD"; + protected static final int BOAT_DEFAULT_IMMATRICULATION = 123456; + protected static final String SAMPLE_ROW_DEFAULT_CODE = "2010_0001"; + protected static final String COMPANY_DEFAULT_NAME = "TARTANPION"; + protected static final String OBSERVER_DEFAULT_FIRST_NAME = "Homer"; + protected static final String OBSERVER_DEFAULT_LAST_NAME = "Simpson"; + protected static final String OBSERVER_DEFAULT_LOGIN = "homer"; + + @BeforeClass + public static void setUpClass() throws Exception { + // Create tmpdir if not exist + String tmpdir = System.getProperty("java.io.tmpdir"); + File file = new File(tmpdir); + if (!file.exists()) { + boolean b = file.mkdirs(); + if (!b) { + if (log.isWarnEnabled()) + log.warn("Could not create tmp directory : " + file); + } + if (log.isInfoEnabled()) { + log.info("tmp dir : " + file + " was created"); + } + } + manager = new TestManager(); + } + + @Before + public void setUp() throws Exception { + if (log.isDebugEnabled()) { + log.debug("Start manager"); + } + manager.start(); + serviceSampling = (ServiceSamplingImpl) manager.getServiceSampling(); + } + + @After + public void tearDown() throws Exception { + manager.stop(); + } + + /** + * Create a company : <br /> + * <ul> + * <li>first name : Homer</li> + * <li>last name : Simpson</li> + * <li>login : homer</li> + * <li>company : ref to TARTANPION</li> + * <li>role : OBSERVER</li> + * </ul> + * + * @return the new Company + * @throws TopiaException + */ + protected WaoUser createDefaultObserver() throws TopiaException { + TopiaContext transaction = manager.getContext().beginTransaction(); + WaoUser observer = null; + try { + WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction); + observer = userDAO.create( + WaoUser.PROPERTY_COMPANY, findDefaultCompany(), + WaoUser.PROPERTY_LOGIN, OBSERVER_DEFAULT_LOGIN, + WaoUser.PROPERTY_FIRST_NAME, OBSERVER_DEFAULT_FIRST_NAME, + WaoUser.PROPERTY_LAST_NAME, OBSERVER_DEFAULT_LAST_NAME); + if (log.isDebugEnabled()) { + log.debug("Create default observer : " + observer); + } + + transaction.commitTransaction(); + } finally { + transaction.closeContext(); + } + return observer; + } + + /** + * Create a user : <br /> + * <ul> + * <li>first name : null</li> + * <li>last name : null</li> + * <li>login : defined with {@code login} argument</li> + * <li>company : defined with {@code company} argument</li> + * <li>role : defined with {@code role} argument</li> + * </ul> + * + * @param login String unique login for the new user + * @param role UserRole of the user + * @param company Company parent of the user + * @return the new WaoUser + * @throws TopiaException + */ + protected WaoUser createUser(String login, UserRole role, + Company company) throws TopiaException { + TopiaContext transaction = manager.getContext().beginTransaction(); + WaoUser observer = null; + try { + WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction); + observer = userDAO.create( + WaoUser.PROPERTY_COMPANY, company, + WaoUser.PROPERTY_LOGIN, login, + WaoUser.PROPERTY_FIRST_NAME, null, + WaoUser.PROPERTY_LAST_NAME, null); + + if (log.isDebugEnabled()) { + log.debug("Create observer : " + observer); + } + + transaction.commitTransaction(); + } finally { + transaction.closeContext(); + } + return observer; + } + + /** + * Create a company : <br /> + * <ul> + * <li>name : TARTANPION</li> + * </ul> + * + * @return the new Company + * @throws TopiaException + */ + protected Company createDefaultCompany() throws TopiaException { + return createCompany(COMPANY_DEFAULT_NAME); + } + + /** + * Create a company : <br /> + * <ul> + * <li>name : defined with {@code name} argument</li> + * </ul> + * + * @param name + * @return the new Company + * @throws TopiaException + */ + protected Company createCompany(String name) throws TopiaException { + Company company = null; + TopiaContext transaction = manager.getContext().beginTransaction(); + try { + CompanyDAO dao = WaoDAOHelper.getCompanyDAO(transaction); + + company = dao.create(); + company.setName(name); + + transaction.commitTransaction(); + } finally { + transaction.closeContext(); + } + + return company; + } + + /** + * Create a default sampleRow : <br /> + * <ul> + * <li>code : 2010_0001</li> + * <li>company : TARTANPION</li> + * </ul> + * + * @return the new SampleRow + * @throws TopiaException + */ + protected SampleRow createDefaultSampleRow() throws TopiaException { + return createSampleRow(SAMPLE_ROW_DEFAULT_CODE, findDefaultCompany()); + } + + /** + * Create a default sampleRow : <br /> + * <ul> + * <li>code : defined with {@code code} argument</li> + * <li>company : defined with {@code company} argument</li> + * </ul> + * + * @param code + * @param company + * @return the new SampleRow + * @throws TopiaException + */ + protected SampleRow createSampleRow(String code, Company company) + throws TopiaException { + SampleRow row = null; + TopiaContext transaction = manager.getContext().beginTransaction(); + try { + SampleRowDAO dao = + WaoDAOHelper.getSampleRowDAO(transaction); + + row = dao.create(); + row.setCode(code); + row.setCompany(company); + if (log.isDebugEnabled()) { + log.debug("Create sampleRow : " + row); + } + + transaction.commitTransaction(); + } finally { + transaction.closeContext(); + } + + return row; + } + + /** + * Create a default boat : <br /> + * <ul> + * <li>immatriculation : 123456</li> + * <li>name : SPRINGFIELD</li> + * <li>active : true</li> + * </ul> + * + * @return the new Boat + * @throws TopiaException + */ + protected Boat createDefaultBoat() throws TopiaException { + return createBoat(123456, "SPRINGFIELD"); + } + + /** + * Create a boat : <br /> + * <ul> + * <li>immatriculation : defined with {@code immatriculation} argument</li> + * <li>name : defined with {@code name} argument</li> + * <li>active : true</li> + * </ul> + * + * @param immatriculation + * @param name + * @return the new Boat + * @throws TopiaException + */ + protected Boat createBoat(int immatriculation, String name) + throws TopiaException { + Boat boat = null; + TopiaContext transaction = manager.getContext().beginTransaction(); + try { + BoatDAO dao = WaoDAOHelper.getBoatDAO(transaction); + + // CREATE + boat = dao.create(); + boat.setImmatriculation(immatriculation); + boat.setName(name); + boat.setActive(true); + if (log.isDebugEnabled()) { + log.debug("Create boat : " + boat); + } + + transaction.commitTransaction(); + + } finally { + transaction.closeContext(); + } + return boat; + } + + /** + * Create an elligibleBoat : <br /> + * <ul> + * <li>sampleRow : defined with {@code row} argument</li> + * <li>boat : defined with {@code boat} argument</li> + * <li>companyActive : true if {@code company} is true, null otherwise</li> + * <li>globalActive : true if {@code company} is false, false otherwise</li> + * </ul> + * + * @param row to set for ElligibleBoat + * @param boat to set for ElligibleBoat + * @param company true for companyActive, false for globalActive + * @return the new ElligibleBoat + * @throws TopiaException + */ + protected ElligibleBoat createElligibleBoat(SampleRow row, Boat boat, + boolean company) throws TopiaException { + + ElligibleBoat elligibleBoat = null; + TopiaContext transaction = manager.getContext().beginTransaction(); + try { + ElligibleBoatDAO dao = + WaoDAOHelper.getElligibleBoatDAO(transaction); + + // CREATE + elligibleBoat = dao.create(); + elligibleBoat.setBoat(boat); + elligibleBoat.setSampleRow(row); + if (company) { + elligibleBoat.setCompanyActive(true); + } else { + elligibleBoat.setGlobalActive(true); + } + transaction.commitTransaction(); + + } finally { + transaction.closeContext(); + } + return elligibleBoat; + } + + /** + * Create a default contact : <br /> + * <ul> + * <li>boat : SPRINGFIELD</li> + * <li>observer : homer</li> + * <li>sampleRow : 2010_0001</li> + * <li>state : CONTACT_START</li> + * <li>companyValidation : null</li> + * <li>programValidation : null</li> + * </ul> + * + * @return the new Contact + * @throws TopiaException + */ + protected Contact createDefaultContact() throws TopiaException { + TopiaContext transaction = manager.getContext().beginTransaction(); + Contact contact = null; + try { + ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); + + // CREATE + contact = dao.create(); + contact.setBoat(findDefaultBoat()); + contact.setContactState(ContactState.CONTACT_START); + contact.setMainObserver(findDefaultObserver()); + contact.setSampleRow(findDefaultSampleRow()); + if (log.isDebugEnabled()) { + log.debug("Create contact : " + contact); + } + + transaction.commitTransaction(); + + } finally { + transaction.closeContext(); + } + return contact; + } + + protected Company findDefaultCompany() throws TopiaException { + Company findCompany = findCompanyByName(BOAT_DEFAULT_NAME); + if (findCompany == null) { + findCompany = createDefaultCompany(); + } + return findCompany; + } + + protected Company findCompanyByName(String name) throws TopiaException { + Company company = null; + TopiaContext transaction = manager.getContext().beginTransaction(); + try { + CompanyDAO dao = WaoDAOHelper.getCompanyDAO(transaction); + + company = dao.findByName(name); + } finally { + transaction.closeContext(); + } + return company; + } + + protected SampleRow findDefaultSampleRow(String... properties) + throws TopiaException { + SampleRow findRow = findSampleRowByCode( + SAMPLE_ROW_DEFAULT_CODE, properties); + + if (findRow == null) { + findRow = createDefaultSampleRow(); + } + return findRow; + } + + /** + * Find a sampleRow existing using his unique {@code code}. Some + * {@code properties} can be added to load them if the sampleRow is + * corretly retrieve. + * + * @param code SampleRow unique code + * @param properties authorized properties : ElligibleBoat + * @return the existing SampleRow if found, null otherwise + * @throws TopiaException + */ + protected SampleRow findSampleRowByCode(String code, String... properties) + throws TopiaException { + SampleRow row = null; + TopiaContext transaction = manager.getContext().beginTransaction(); + try { + SampleRowDAO dao = + WaoDAOHelper.getSampleRowDAO(transaction); + + row = dao.findByCode(code); + if (row != null) { + // Load properties + for (String property : properties) { + if (property.equals(SampleRow.PROPERTY_ELLIGIBLE_BOAT)) { + row.sizeElligibleBoat(); + } + } + } + } finally { + transaction.closeContext(); + } + return row; + } + + protected Boat findDefaultBoat() throws TopiaException { + Boat findBoat = + findBoatByImmatriculation(BOAT_DEFAULT_IMMATRICULATION); + if (findBoat == null) { + findBoat = createDefaultBoat(); + } + return findBoat; + } + + protected Boat findBoatByImmatriculation(int immatriculation) + throws TopiaException { + Boat boat = null; + TopiaContext transaction = manager.getContext().beginTransaction(); + try { + BoatDAO dao = + WaoDAOHelper.getBoatDAO(transaction); + + boat = dao.findByImmatriculation(immatriculation); + } finally { + transaction.closeContext(); + } + return boat; + } + + protected WaoUser findDefaultObserver() throws TopiaException { + WaoUser findObserver = + findUserByLogin(OBSERVER_DEFAULT_LOGIN); + if (findObserver == null) { + findObserver = createDefaultObserver(); + } + return findObserver; + } + + protected WaoUser findUserByLogin(String login) + throws TopiaException { + WaoUser user = null; + TopiaContext transaction = manager.getContext().beginTransaction(); + try { + WaoUserDAO dao = + WaoDAOHelper.getWaoUserDAO(transaction); + + user = dao.findByLogin(login); + // Load company + if (user != null) { + user.getCompany(); + } + } finally { + transaction.closeContext(); + } + return user; + } + + protected void prepareContactsData(Company company1, Company company2) + throws WaoBusinessException, TopiaException { + + manager.setCurrentDate(DateUtil.createDate(5, 10, 2010)); + + InputStream input = getClass().getResourceAsStream("/import/navires.csv"); + ServiceBoat serviceBoat = manager.getServiceBoat(); + serviceBoat.importBoatCsv(input); + List<Boat> boats = serviceBoat.getBoatsByImmatriculations("174258"); + Boat boat = boats.get(0); + + List<Boat> boats2 = serviceBoat.getBoatsByImmatriculations("177474"); + Boat boat2 = boats2.get(0); + + TopiaContext transaction = manager.getContext().beginTransaction(); + + WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction); + WaoUser user = userDAO.create(WaoUser.PROPERTY_FIRST_NAME,"Jean", WaoUser.PROPERTY_LAST_NAME, "Michmuche", + WaoUser.PROPERTY_COMPANY, company1); + company1.addWaoUser(user); + WaoUser user2 = userDAO.create(WaoUser.PROPERTY_FIRST_NAME,"Bill", WaoUser.PROPERTY_LAST_NAME, "Murray", + WaoUser.PROPERTY_COMPANY, company2); + company2.addWaoUser(user2); + + transaction.commitTransaction(); + + input = getClass().getResourceAsStream("/import/zonesPeche.csv"); + ServiceReferential serviceReferential = manager.getServiceReferential(); + serviceReferential.importFishingZoneCsv(input); + + input = getClass().getResourceAsStream("/import/echantillonnage.csv"); + ServiceSampling serviceSampling = manager.getServiceSampling(); + serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER)); + + SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); + SampleRow row = rowDAO.findByCode("2010_0001"); + SampleRow row2 = rowDAO.findByCode("2009_0006"); + + transaction.closeContext(); + + + ServiceContact serviceContact = manager.getServiceContact(); + + ConnectedUser connectedUser = getConnectedUser(user, UserRole.ADMIN, ObsProgram.OBSMER); + + // Contacts for company TARTANPION + Contact contact1 = new ContactImpl(); + contact1.setBoat(boat); + contact1.setMainObserver(user); + contact1.setSampleRow(row); + contact1.setContactState(ContactState.OBSERVATION_DONE); + Date begin = DateUtil.createDate(3, 3, 2010); + contact1.setObservationBeginDate(begin); + Date end = DateUtil.createDate(4, 3, 2010); + contact1.setObservationEndDate(end); + serviceContact.saveContact(connectedUser, contact1, false); + + Contact contact2 = new ContactImpl(); + contact2.setBoat(boat); + contact2.setMainObserver(user); + contact2.setSampleRow(row); + contact2.setContactState(ContactState.OBSERVATION_DONE); + begin = DateUtil.createDate(3, 10, 2010); + contact2.setObservationBeginDate(begin); + end = DateUtil.createDate(4, 10, 2010); + contact2.setObservationEndDate(end); + serviceContact.saveContact(connectedUser, contact2, false); + + Contact contact3 = new ContactImpl(); + contact3.setBoat(boat); + contact3.setMainObserver(user); + contact3.setSampleRow(row); + contact3.setContactState(ContactState.CONTACT_REFUSED); + begin = DateUtil.createDate(3, 5, 2010); + end = DateUtil.createDate(4, 5, 2010); + contact3.setObservationEndDate(end); + contact3.setTopiaCreateDate(begin); + serviceContact.saveContact(connectedUser, contact3, false); + + // Contacts for company BIS + Contact contact4 = new ContactImpl(); + contact4.setBoat(boat2); + contact4.setMainObserver(user2); + contact4.setSampleRow(row2); + contact4.setContactState(ContactState.OBSERVATION_EXPECTED); + begin = DateUtil.createDate(3, 3, 2010); + end = DateUtil.createDate(4, 3, 2010); + contact4.setObservationEndDate(end); + contact4.setTopiaCreateDate(begin); + serviceContact.saveContact(connectedUser, contact4, false); + + Contact contact5 = new ContactImpl(); + contact5.setBoat(boat2); + contact5.setMainObserver(user2); + contact5.setSampleRow(row2); + contact5.setContactState(ContactState.OBSERVATION_CANCELLED); + begin = DateUtil.createDate(3, 5, 2010); + end = DateUtil.createDate(4, 5, 2010); + contact5.setObservationEndDate(end); + contact5.setTopiaCreateDate(begin); + serviceContact.saveContact(connectedUser, contact5, false); + + // Contact refused by program, will not be in result + Contact contact6 = new ContactImpl(); + contact6.setBoat(boat2); + contact6.setMainObserver(user2); + contact6.setSampleRow(row2); + contact6.setContactState(ContactState.OBSERVATION_CANCELLED); + begin = DateUtil.createDate(3, 3, 2010); + contact6.setTopiaCreateDate(begin); + end = DateUtil.createDate(4, 3, 2010); + contact6.setObservationEndDate(end); + contact6.setValidationProgram(Boolean.FALSE); + serviceContact.saveContact(connectedUser, contact6, false); + } + + public ConnectedUser getConnectedUser(WaoUser user, UserRole userRole, ObsProgram obsProgram) { + ConnectedUser connectedUser = new ConnectedUserImpl(); + if (user == null) { + WaoUser waoUser = new WaoUserImpl(); + connectedUser.setUser(waoUser); + } else { + connectedUser.setUser(user); + } + connectedUser.setProfile(new UserProfileImpl(obsProgram, userRole, true)); + return connectedUser; + } + + public ConnectedUser getConnectedAdmin() { + return getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER); + } + +} Property changes on: trunk/wao-business/src/test/java/fr/ifremer/wao/service/AbstractServiceTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Deleted: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebFixtures.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebFixtures.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebFixtures.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -1,145 +0,0 @@ -package fr.ifremer.wao.service; - -import fr.ifremer.wao.TestManager; -import fr.ifremer.wao.WaoBusinessException; -import fr.ifremer.wao.bean.ConnectedUser; -import fr.ifremer.wao.bean.ObsProgram; -import fr.ifremer.wao.bean.UserRole; -import fr.ifremer.wao.entity.Boat; -import fr.ifremer.wao.entity.Company; -import fr.ifremer.wao.entity.CompanyImpl; -import fr.ifremer.wao.entity.UserProfile; -import fr.ifremer.wao.entity.UserProfileImpl; -import fr.ifremer.wao.entity.WaoUser; -import fr.ifremer.wao.entity.WaoUserImpl; - -import java.io.InputStream; - -public class ObsDebFixtures { - - protected TestManager manager; - - protected WaoUser josh; - protected Company codeLutin; - protected Company ifremer; - protected Boat moise; - protected Boat samourai; - - protected boolean boatsImported; - - public ObsDebFixtures(TestManager manager) { - this.manager = manager; - } - - public Company codeLutin() { - if (codeLutin == null) { - codeLutin = new CompanyImpl(); - codeLutin.setName("Code Lutin"); - codeLutin.setActive(true); - manager.getServiceUser().createUpdateCompany(codeLutin); - } - return codeLutin; - } - - public Company ifremer() { - if (ifremer == null) { - ifremer = new CompanyImpl(); - ifremer.setName("Ifremer"); - ifremer.setActive(true); - manager.getServiceUser().createUpdateCompany(ifremer); - } - return ifremer; - } - - public void boats() { - if ( ! boatsImported) { - ServiceBoat serviceBoat = manager.getServiceBoat(); - InputStream input = getClass().getResourceAsStream("/import/navires.csv"); - try { - serviceBoat.importBoatCsv(input); - } catch (WaoBusinessException e) { - throw new RuntimeException(e); - } - } - } - - public Boat samourai() { - if (samourai == null) { - boats(); - ServiceBoat serviceBoat = manager.getServiceBoat(); - try { - samourai = serviceBoat.getBoat(174258); - } catch (WaoBusinessException e) { - throw new RuntimeException(e); - } - } - return samourai; - } - - public Boat moise() { - if (moise == null) { - boats(); - ServiceBoat serviceBoat = manager.getServiceBoat(); - try { - moise = serviceBoat.getBoat(273129); - } catch (WaoBusinessException e) { - throw new RuntimeException(e); - } - } - return moise; - } - - public WaoUser josh() { - if (josh == null) { - josh = new WaoUserImpl(); - josh.setLogin("josh"); - josh.setFirstName("Joshua"); - josh.setLastName("B."); - josh.setPassword(manager.getContext().encodeString("mdp")); - josh.setActive(true); - josh.setCompany(codeLutin()); - UserProfile adminProfile = new UserProfileImpl(ObsProgram.OBSDEB, UserRole.ADMIN, true); - UserProfile coordinatorProfile = new UserProfileImpl(ObsProgram.OBSDEB, UserRole.COORDINATOR, true); - UserProfile observerProfile = new UserProfileImpl(ObsProgram.OBSDEB, UserRole.OBSERVER, true); - josh.addUserProfile(adminProfile); - josh.addUserProfile(coordinatorProfile); - josh.addUserProfile(observerProfile); - try { - manager.getServiceUser().createUpdateUser(josh, false); - } catch (WaoBusinessException e) { - throw new RuntimeException(e); - } - josh.setPassword("mdp"); - } - return josh; - } - - protected ConnectedUser joshAs(UserRole userRole) { - // first, log in as josh - ConnectedUser connectedUser = null; - try { - connectedUser = manager.getServiceUser().connect(josh().getLogin(), josh().getPassword()); - } catch (WaoBusinessException e) { - throw new RuntimeException(e); - } - // then choose profile - for (UserProfile userProfile : josh().getUserProfile()) { - if (userProfile.getUserRole() == userRole) { - connectedUser.setProfile(userProfile); - } - } - return connectedUser; - } - - public ConnectedUser joshAsAdministrator() { - return joshAs(UserRole.ADMIN); - } - - public ConnectedUser joshAsCoordinator() { - return joshAs(UserRole.COORDINATOR); - } - - public ConnectedUser joshAsObserver() { - return joshAs(UserRole.OBSERVER); - } -} \ No newline at end of file Deleted: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ObsDebTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -1,563 +0,0 @@ -/* - * #%L - * Wao :: Business - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2011 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% - */ -package fr.ifremer.wao.service; - -import fr.ifremer.wao.TestManager; -import fr.ifremer.wao.WaoBusinessException; -import fr.ifremer.wao.bean.BoatFilter; -import fr.ifremer.wao.bean.ConnectedUser; -import fr.ifremer.wao.bean.ContactFilter; -import fr.ifremer.wao.bean.ContactState; -import fr.ifremer.wao.bean.ContactStateStatistics; -import fr.ifremer.wao.bean.ObservationType; -import fr.ifremer.wao.bean.SamplingFilter; -import fr.ifremer.wao.bean.SamplingFilterValues; -import fr.ifremer.wao.bean.ValidationResult; -import fr.ifremer.wao.entity.Boat; -import fr.ifremer.wao.entity.Contact; -import fr.ifremer.wao.entity.ObsDebCode; -import fr.ifremer.wao.entity.SampleRow; -import fr.ifremer.wao.entity.TerrestrialDivision; -import fr.ifremer.wao.entity.TerrestrialLocation; -import fr.ifremer.wao.io.ImportResults; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.time.DateUtils; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.nuiton.util.DateUtil; -import org.nuiton.util.PeriodDates; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * - * - * @author bleny - */ -public class ObsDebTest { - - private static final Logger log = LoggerFactory.getLogger(ObsDebTest.class); - - protected TestManager manager; - - protected ServiceUser serviceUser; - protected ServiceReferential serviceReferential; - protected ServiceBoat serviceBoat; - protected ServiceSampling serviceSampling; - protected ServiceSynthesis serviceSynthesis; - - protected ServiceContact serviceContact; - protected ObsDebFixtures fixtures; - - protected static final String SAMPLING_PLAN_CSV = - "PLAN_CODE;SOCIETE;REGION_IFREMER_COD;OBSERVATEUR_COD;OBSERVATION_DATE;UNITE_OBSERVATION_COD;OBSERVATEURS;LIGNE_SANS_CONTACTS\n" - + "2011_888;Ifremer;GA;OBS1;05/01/2010;UO007;;N\n" - + "2011_889;Code Lutin;MA;OBS2;25/02/2010;UO087;;N\n" - + "2011_890;Code Lutin;GA;OBS1;13/02/2010;UO007;;N\n" - + "2011_891;Code Lutin;MA;OBS2;13/02/2010;UO087;;N"; - protected static final String SAMPLING_PLAN_WITH_OBSERVERS_CSV = - "PLAN_CODE;REGION_IFREMER_COD;OBSERVATEUR_COD;OBSERVATION_DATE;UNITE_OBSERVATION_COD;OBSERVATEURS;LIGNE_SANS_CONTACTS\n" - + "2011_890;GA;OBS1;13/02/2010;UO007;josh;N"; - protected static final String PHONE_SAMPLING_PLAN_CSV = - "PLAN_CODE;SOCIETE;OBSERVATEUR_COD;OBSERVATION_DATE;NAVIRE_COD;OBSERVATEURS\n" - + "2011_901;Code Lutin;OBS1;6/2010;174258;"; - - @Before - public void before() { - manager = new TestManager(); - manager.start(); - - serviceUser = manager.getServiceUser(); - serviceReferential = manager.getServiceReferential(); - serviceBoat = manager.getServiceBoat(); - serviceSampling = manager.getServiceSampling(); - serviceContact = manager.getServiceContact(); - serviceSynthesis = manager.getServiceSynthesis(); - - fixtures = new ObsDebFixtures(manager); - } - - @After - public void stopManager() { - manager.stop(); - manager = null; - } - - /** - * As an admin, i must be able to import terrestrial divisions - */ - @Test - public void adminCanImportTerrestrialDivisions() { - // as an admin, i can import terrestrial divisions, i should not - // raise any exception - InputStream input = getClass().getResourceAsStream("/import/purifiedTerrestrialDivisions.csv"); - serviceReferential.importTerrestrialDivisions(input); - - // i can read what was imported - List<TerrestrialDivision> observationsUnits = serviceReferential.getAllObservationUnits(); - Assert.assertEquals(243, observationsUnits.size()); - } - - /** - * As an admin, i must be able to import a sampling plan - * @throws WaoBusinessException if import fail - */ - @Test - public void adminCanImportSamplingPlan() throws WaoBusinessException { - adminCanImportTerrestrialDivisions(); - - // First create add two companies in Wao - manager.setCurrentDate(2, 1, 2010); - - fixtures.ifremer(); - fixtures.codeLutin(); - - // Then, import the sampling plan - manager.setCurrentDate(3, 1, 2010); - - InputStream input = IOUtils.toInputStream(SAMPLING_PLAN_CSV); - ImportResults importResults = serviceSampling.importSamplingPlanCsv(input, fixtures.joshAsAdministrator()); - Assert.assertEquals(4, importResults.getNbRowsImported()); - Assert.assertEquals(0, importResults.getNbRowsRefused()); - } - - @Test - public void adminCanImportPhoneSamplingPlan() throws WaoBusinessException { - manager.setCurrentDate(2, 1, 2010); - - fixtures.ifremer(); - fixtures.codeLutin(); - fixtures.boats(); - - manager.setCurrentDate(3, 1, 2010); - - InputStream input = IOUtils.toInputStream(PHONE_SAMPLING_PLAN_CSV); - ImportResults importResults = serviceSampling.importSamplingPlanCsv(input, fixtures.joshAsAdministrator()); - Assert.assertEquals(1, importResults.getNbRowsImported()); - Assert.assertEquals(0, importResults.getNbRowsRefused()); - } - - /** - * As an admin, i should be able to read sampling plan - * @throws WaoBusinessException if a call to service fail - */ - @Test - public void adminCanReadSamplingPlan() throws WaoBusinessException { - - // given a sampling plan - adminCanImportSamplingPlan(); - - // as an administrator, i can get the sampling plan - - // Since a new filter may be initialized for a period of time, - // we set the current date to be deterministic, at this date - // filter returned must be quite large to make 2 sample rows - // non filtered - manager.setCurrentDate(DateUtil.createDate(25, 1, 2010)); - - SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsAdministrator()); - - if (log.isDebugEnabled()) { - log.debug("a new empty sampling filter is " + samplingFilter.toString()); - } - - List<SampleRow> sampleRows = serviceSampling.getSampleRowsByFilter(samplingFilter); - - if (log.isDebugEnabled()) { - log.debug(sampleRows.toString()); - } - // as an admin, i can see all the sample-rows for all companies - Assert.assertEquals(4, sampleRows.size()); - - for (SampleRow sampleRow : sampleRows) { - // i must be able to read those values without error - sampleRow.getObservationUnit().getObservationUnitCode(); - sampleRow.getExpectedDate(); - sampleRow.getGroupName(); - sampleRow.getCompany().getName(); - - // all the rows have a code - Assert.assertTrue(StringUtils.isNotEmpty(sampleRow.getCode())); - } - } - - @Test - public void usersCanFilterSamplingPlan() throws WaoBusinessException { - - // given a sampling plan - adminCanImportSamplingPlan(); - - // i can filter the sampling plan by getting a filter - SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsAdministrator()); - - // and the possible values i can use to fill the filter - SamplingFilterValues samplingFilterValues = serviceSampling.getPossibleValuesForFilter(samplingFilter); - - // according to the given sampling plan, there may be as many different values - // as different values used in the sampling plan, for example : two - // companies are used in the sampling plan so, 2 companies must be in - // the possible values - Assert.assertEquals(2, samplingFilterValues.getCompanies().size()); - Assert.assertEquals(4, samplingFilterValues.getSampleRows().size()); - Assert.assertEquals(2, samplingFilterValues.getObservationUnits().size()); - Assert.assertEquals(0, samplingFilterValues.getObservers().size()); - - samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsAdministrator()); - samplingFilter.setPeriod(new PeriodDates(DateUtil.createDate(20, 2, 2010), - DateUtil.createDate(27, 2, 2010))); - - if (log.isDebugEnabled()) { - log.debug("sampling filter for admin with period is " + samplingFilter.toString()); - } - - // service should have returned the line with date 25/02/2010 - List<SampleRow> sampleRows = serviceSampling.getSampleRowsByFilter(samplingFilter); - Assert.assertEquals(1, sampleRows.size()); - Assert.assertEquals("2011_889", sampleRows.get(0).getCode()); - } - - /** - * As an admin, i should be able to read sampling plan - * @throws WaoBusinessException if call to service fail - */ - @Test - public void coordinatorCanReadSamplingPlan() throws WaoBusinessException { - - // given a sampling plan - adminCanImportSamplingPlan(); - - // as a coordinator, i can get the sampling plan - manager.setCurrentDate(DateUtil.createDate(25, 1, 2010)); - - SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsCoordinator()); - - if (log.isDebugEnabled()) { - log.debug("a new empty sampling filter for coordinator is " + samplingFilter.toString()); - } - - List<SampleRow> sampleRows = serviceSampling.getSampleRowsByFilter(samplingFilter); - - if (log.isDebugEnabled()) { - log.debug(sampleRows.toString()); - } - // as an coordinator, i can see all sample-rows only for my company - Assert.assertEquals(3, sampleRows.size()); - } - - @Test - public void coordinatorCanAddObserversViaImport() throws WaoBusinessException, IOException { - - // given a sampling plan - adminCanImportSamplingPlan(); - - // as a coordinator, i can export the sampling plan - SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsCoordinator()); - samplingFilter.setExpectedObservationType(ObservationType.FIELD_WORK_OBSERVATION); - InputStream input = serviceSampling.exportSamplingPlanCsv(fixtures.joshAsCoordinator(), samplingFilter); - - String csv = IOUtils.toString(input); - - if (log.isDebugEnabled()) { - log.debug("CSV file as it was exported:\n" + csv); - log.debug("CSV file as it will be imported (with observers):\n" + SAMPLING_PLAN_WITH_OBSERVERS_CSV); - } - - // i can add a column to add observers to each line - serviceSampling.importSamplingPlanCsv(IOUtils.toInputStream(SAMPLING_PLAN_WITH_OBSERVERS_CSV), fixtures.joshAsCoordinator()); - - // now getting the sampling plan and checking that observers are linked to sample rows - SampleRow row2011_890 = serviceSampling.getSampleRowByCode(fixtures.joshAsCoordinator(), "2011_890"); - Assert.assertNotNull(row2011_890); - Assert.assertEquals(1, row2011_890.sizeObservers()); - - // adding an observer must add a log entry - Assert.assertEquals(1, row2011_890.sizeSampleRowLog()); - - // the text of the log entry itself - String logEntry = row2011_890.getSampleRowLog().get(0).getLogText(); - - if (log.isDebugEnabled()) { - log.debug("log entry after update on observers is: '" + logEntry + "'"); - } - - Assert.assertTrue("added observer is mentioned in the log", logEntry.contains(fixtures.josh().getFullName())); - } - - /** - * We want to check that the coordinator is not able to create a bad sampling - * plan by sending a same observer on two different place the same day - * @throws WaoBusinessException if call to service fail - * @throws java.io.IOException if failure while reading CSV - */ - @Test - public void coordinatorCannotBreakSamplingPlan() throws IOException, WaoBusinessException { - coordinatorCanAddObserversViaImport(); - - // josh cannot be affected to this row, because on the same day - // he is to be elsewhere - SampleRow row2011_891 = serviceSampling.getSampleRowByCode(fixtures.joshAsCoordinator(), "2011_891"); - row2011_891.addObservers(fixtures.josh()); - - ValidationResult validationResult = serviceSampling.validateSampleRow(row2011_891); - - if (log.isDebugEnabled()) { - log.debug("validation result is " + validationResult.toString()); - } - - Assert.assertFalse("validation must fail", validationResult.isSuccess()); - Assert.assertTrue("message mentions sample row in conflict", - validationResult.getMessage().contains("2011_890")); - } - - @Test - public void observerCanReadSamplingPlan() throws IOException, WaoBusinessException { - // first, the coordinator must add observers - coordinatorCanAddObserversViaImport(); - - // as an observer, i can get the sampling plan - manager.setCurrentDate(DateUtil.createDate(10, 2, 2010)); - - SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsObserver()); - - if (log.isDebugEnabled()) { - log.debug("a new empty sampling filter for observer is " + samplingFilter.toString()); - } - - List<SampleRow> sampleRows = serviceSampling.getSampleRowsByFilter(samplingFilter); - - // as an observer, i can see only the sample-rows the coordinator affected to me - Assert.assertEquals(1, sampleRows.size()); - } - - @Test - public void observerCanExportHisRoadMapAsICalendar() throws IOException, WaoBusinessException { - // first, the coordinator must add observers - coordinatorCanAddObserversViaImport(); - manager.setCurrentDate(DateUtil.createDate(10, 2, 2010)); - - String joshAsObserverToken = fixtures.joshAsObserver().getToken(); - ConnectedUser joshAsObserver = serviceUser.getConnectedUserByToken(joshAsObserverToken); - - InputStream in = serviceSampling.exportSamplingPlanICalendar(joshAsObserver); - - String result = IOUtils.toString(in); - if (log.isDebugEnabled()) { - log.debug("exported iCal for observer is " + result); - } - - Assert.assertEquals(1, StringUtils.countMatches(result, "BEGIN:VEVENT")); - Assert.assertTrue(result.contains("DTSTART;VALUE=DATE:20100213")); - Assert.assertTrue(result.contains("TZID:Europe/Paris")); - Assert.assertTrue(result.contains("LOCATION:GA-UO007 DESHAIES_POINTE NOIRE")); - Assert.assertTrue(result.contains("SUMMARY:Observation ObsDeb")); - } - - @Test - public void observerCanCreateContact() throws IOException, WaoBusinessException { - observerCanReadSamplingPlan(); - - // we are one day after the observation - manager.setCurrentDate(DateUtil.createDate(15, 2, 2010)); - - // the user is supposed to create a contact to tell what he - // has done this day, when i was supposed to observe for this row - SampleRow row = serviceSampling.getSampleRowByCode(fixtures.joshAsObserver(), "2011_890"); - - fixtures.boats(); // boats must be imported - - // observer can get a list of boats given this sample row. It should give him the boats - // having a portOfRegistry in the observation unit of the sample-row - BoatFilter boatFilter = serviceBoat.newBoatFilter(fixtures.joshAsObserver()); - boatFilter.setSampleRow(row); - Map<Integer, Boat> boatsForRow = serviceBoat.getBoatsByFilter(boatFilter); - if (log.isDebugEnabled()) { - log.debug("boats returned after filtering on sample row:" + boatsForRow.values()); - } - Assert.assertEquals(4, boatsForRow.size()); - - Boat boat = boatsForRow.get(fixtures.moise().getImmatriculation()); - - // let's create the contact - Contact contact = serviceContact.getNewContact(fixtures.joshAsObserver(), row, boat); - - // by default, a contact must be of type observation - Assert.assertEquals(ObservationType.FIELD_WORK_OBSERVATION, contact.getObservationType()); - - // in the observation report, i must tell where i was and when - List<TerrestrialLocation> ports = serviceReferential.getAllPorts(contact.getSampleRow().getObservationUnit()); - - if (log.isDebugEnabled()) { - for (TerrestrialLocation port : ports) { - log.debug("possible ports for this contact contains " + port.getDescription()); - } - } - - // i was at this port, from 9:15AM to 10:30AM - contact.setTerrestrialLocation(ports.get(4)); - contact.setObservationBeginDate(DateUtil.createDate(0, 15, 9, 13, 2, 2010)); - contact.setObservationEndDate(DateUtil.createDate(0, 30, 10, 13, 2, 2010)); - - // let's validate - ValidationResult validationResult = serviceContact.validateContact(contact); - - if (log.isDebugEnabled()) { - log.debug("result for contact validation is " + validationResult); - } - - Assert.assertTrue("validation must succeed", validationResult.isSuccess()); - - serviceContact.saveContact(fixtures.joshAsObserver(), contact, false); - - contact = serviceContact.getContact(contact.getTopiaId()); - Assert.assertNotNull("service must have save the data given by observer", contact.getTerrestrialLocation()); - Assert.assertNotNull("service must have save the data given by observer", contact.getObservationBeginDate()); - Assert.assertNotNull("service must have save the data given by observer", contact.getObservationEndDate()); - - // now, i want to create another contact because, at the same - // day, and the same time, i've seen another boat - contact = serviceContact.getNewContact(fixtures.joshAsObserver(), row, fixtures.samourai()); - Assert.assertNotNull("service must have pre filled field", contact.getObservationEndDate()); - Assert.assertNotNull("service must have pre filled field", contact.getTerrestrialLocation()); - - // i've made the survey in this last contact, so i can associate an ObsDebCode - List<ObsDebCode> allObsDebCodes = serviceReferential.getAllObsDebCodes(); - contact.setObsDebCode(allObsDebCodes.get(123)); - serviceContact.saveContact(fixtures.joshAsObserver(), contact, false); - } - - @Test - public void observerCanCreateContactForPhoneSamplingPlan() throws WaoBusinessException { - adminCanImportPhoneSamplingPlan(); - - Date now = DateUtil.createDate(0, 30, 16, 11, 2, 2010); // 11 Feb 2010 at 4:30 PM - manager.setCurrentDate(now); - - // as observer, i can get the sample row i'm working on - SampleRow sampleRow = serviceSampling.getSampleRowByCode(fixtures.joshAsObserver(), "2011_901"); - - // the sample row tell me what boat to call - Boat boatToCall = sampleRow.getBoat(); - - // i can create a contact - Contact firstContact = serviceContact.getNewContact(fixtures.joshAsObserver(), sampleRow, boatToCall); - Assert.assertEquals("Observation type is, by default, a phone call because contact was created from phone sampling plan", - ObservationType.PHONE_CALL, firstContact.getObservationType()); - - // let's suppose the guy refused the survey - firstContact.setObservationBeginDate(now); - firstContact.setObservationEndDate(DateUtils.addMinutes(now, 5)); - firstContact.setContactState(ContactState.CONTACT_REFUSED); - serviceContact.saveContact(fixtures.joshAsObserver(), firstContact, false); - - - // as observer, i can get the substitute for this boat - Set<Boat> substituteBoats = serviceContact.getSubstitutesForBoat(boatToCall); - - if (log.isDebugEnabled()) { - log.debug("substitutes found for boat " + boatToCall + " are " + substituteBoats); - } - - Assert.assertEquals(2, substituteBoats.size()); - - Boat substitute = substituteBoats.iterator().next(); - Contact secondContact = serviceContact.getNewContact(fixtures.joshAsObserver(), sampleRow, substitute); - secondContact.setObservationBeginDate(now); - secondContact.setObservationEndDate(DateUtils.addMinutes(now, 30)); - serviceContact.saveContact(fixtures.joshAsObserver(), secondContact, false); - } - - /** Check that coordinator is able to export the contacts created in {@link #observerCanCreateContact()} - * @throws WaoBusinessException - * @throws IOException - */ - @Test - public void coordinatorCanExportContacts() throws IOException, WaoBusinessException { - // first, create two contacts - observerCanCreateContact(); - - manager.setCurrentDate(DateUtil.createDate(16, 2, 2010)); - - ContactFilter filter = serviceContact.newContactFilter(fixtures.joshAsCoordinator()); - InputStream in = serviceContact.exportContactCsv(filter); - - String csv = IOUtils.toString(in); - - if (log.isDebugEnabled()) { - log.debug("csv for contacts exported as coordinator is \n" + csv); - } - - int expectedLineNumber = 1 + 2; // 1 header line + 2 contacts - int actualLineNumber = StringUtils.countMatches(csv, "\n"); - Assert.assertEquals(expectedLineNumber, actualLineNumber); - } - - /** Check that coordinator is able to export the contacts created in {@link #observerCanCreateContact()} */ - @Test - public void coordinatorCanGetSynthesisResults() throws WaoBusinessException, IOException { - observerCanCreateContact(); - - // TODO 20110426 bleny consider validation company and validation program when counting - - SamplingFilter samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsCoordinator()); - Map<String, Map<String, Integer>> observationHours = - serviceSynthesis.getObservationHours(samplingFilter); - - Assert.assertEquals(2, observationHours.get("2010").get("09").intValue()); - Assert.assertEquals("24 values associated with '2010', one for each hour of the day", - 24, observationHours.get("2010").size()); - - samplingFilter = serviceSampling.newSamplingFilter(fixtures.joshAsCoordinator()); - Map<String, Map<String, Integer>> boatsCounts = - serviceSynthesis.getDistinctBoatsCounts(samplingFilter); - Assert.assertEquals("Two distinct boats observed on February 2010", - 2, boatsCounts.get("2010").get("02").intValue()); - Assert.assertEquals("12 values for must be associated to '2010', one for each month", - 12, boatsCounts.get("2010").size()); - - samplingFilter = serviceSampling. - newSamplingFilter(fixtures.joshAsCoordinator()); - Collection<ContactStateStatistics> contactStateStatistics = - serviceSynthesis.getContactStateStatistics(samplingFilter); - for (ContactStateStatistics contactStateStatistic : contactStateStatistics) { - log.debug(contactStateStatistic.getCompanyName() + " -> " + - contactStateStatistic.getData()); - } - ContactStateStatistics contactStateStatistic = contactStateStatistics. - iterator().next(); - Assert.assertEquals("Code Lutin", contactStateStatistic.getCompanyName()); - Assert.assertEquals(2, contactStateStatistic.getData().get - (ContactState.OBSERVATION_DONE).intValue()); - } -} Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -24,7 +24,6 @@ package fr.ifremer.wao.service; -import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.TestManager; import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoDAOHelper; Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceCartographyImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceCartographyImplTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceCartographyImplTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -20,7 +20,6 @@ */ package fr.ifremer.wao.service; -import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.WaoException; @@ -36,7 +35,6 @@ import org.junit.Test; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.util.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -21,7 +21,6 @@ package fr.ifremer.wao.service; -import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.bean.ConnectedUser; import fr.ifremer.wao.bean.ContactFilter; import fr.ifremer.wao.bean.ContactFilterImpl; Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -22,7 +22,6 @@ package fr.ifremer.wao.service; import com.csvreader.CsvReader; -import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.TestManager; import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoDAOHelper; Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -24,7 +24,6 @@ package fr.ifremer.wao.service; -import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.WaoException; Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -24,7 +24,6 @@ package fr.ifremer.wao.service; -import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.bean.BoardingResult; import fr.ifremer.wao.bean.ConnectedUser; Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceUserImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceUserImplTest.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceUserImplTest.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -24,7 +24,6 @@ package fr.ifremer.wao.service; -import fr.ifremer.wao.AbstractServiceTest; import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.bean.ObsProgram; @@ -42,7 +41,6 @@ import org.junit.Test; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.util.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-05-30 16:17:33 UTC (rev 1305) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ContactForm.java 2011-05-31 13:35:20 UTC (rev 1306) @@ -32,6 +32,7 @@ import fr.ifremer.wao.entity.Contact; import fr.ifremer.wao.entity.ContactStateMotif; import fr.ifremer.wao.entity.ObsDebCode; +import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.TerrestrialLocation; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.service.ServiceContact; @@ -268,7 +269,16 @@ } public List<ObsDebCode> getObsDebCodes() { - return serviceReferential.getAllObsDebCodes(); + TerrestrialLocation regionIfremer; + SampleRow sampleRow = getContact().getSampleRow(); + if (sampleRow.isPhoneCall()) { + regionIfremer = sampleRow.getTerrestrialLocation(); + } else { + regionIfremer = sampleRow.getObservationUnit().getRegionIfremer(); + } + List<ObsDebCode> obsDebCodes = serviceReferential. + getAllObsDebCodes(regionIfremer); + return obsDebCodes; } public SelectModel getContactStateSelectModel() {
participants (1)
-
bleny@users.labs.libre-entreprise.org