[Suiviobsmer-commits] r1051 - in trunk/wao-business/src: main/java/fr/ifremer/wao/entity main/java/fr/ifremer/wao/service main/resources/i18n main/xmi test/java/fr/ifremer/wao/entity test/resources/import
Author: bleny Date: 2011-03-02 19:31:34 +0000 (Wed, 02 Mar 2011) New Revision: 1051 Log: refactor sample row update : diff algo moved out of service Added: trunk/wao-business/src/test/java/fr/ifremer/wao/entity/SampleRowLogTest.java trunk/wao-business/src/test/resources/import/samplingPlan-obsdeb.csv Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowLogImpl.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 Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowLogImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowLogImpl.java 2011-03-02 13:11:44 UTC (rev 1050) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowLogImpl.java 2011-03-02 19:31:34 UTC (rev 1051) @@ -24,13 +24,20 @@ package fr.ifremer.wao.entity; +import fr.ifremer.wao.WaoUtils; +import fr.ifremer.wao.bean.ObsProgram; +import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; +import org.nuiton.util.DateUtil; import org.nuiton.util.PeriodDates; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Map; /** * SampleRowLogImpl @@ -41,10 +48,7 @@ */ public class SampleRowLogImpl extends SampleRowLogAbstract implements SampleRowLog { - private static final long serialVersionUID = 1L; - - @Override - public void addChange(String text) { + protected void addChange(String text) { String log = getLogText(); if (!StringUtils.isEmpty(log)) { log += "\n"; @@ -54,116 +58,400 @@ log += text; setLogText(log); } +// +// @Override +// public void addChangeProfession(SampleRow oldSampleRow, SampleRow newSampleRow) { +// Profession newProfession = newSampleRow.getProfession(); +// +// if (oldSampleRow == null) { +// addChange("Le métier de la ligne est " + newSampleRow.getProfessionDescription()); +// if (newProfession.getLibelle() != null) { +// addChange("Le libelle du métier est " + newProfession.getLibelle()); +// } +// if (newProfession.getSpecies() != null) { +// addChange("Les espèces cibles du métier sont " + newProfession.getSpecies()); +// } +// return; +// } +// +// if (!nvl(oldSampleRow.getProfessionDescription()).equals(nvl(newSampleRow.getProfessionDescription()))) { +// addChange("Le métier de la ligne est passé de " + oldSampleRow.getProfessionDescription() +// + " à " + newSampleRow.getProfessionDescription()); +// } +// +// Profession oldProfession = oldSampleRow.getProfession(); +// if (newProfession.getLibelle() != null && !nvl(oldProfession.getLibelle()).equals(nvl(newProfession.getLibelle()))) { +// addChange("Le libellé du métier est passé de " + oldProfession.getLibelle() + " à " + newProfession.getLibelle()); +// } +// if (newProfession.getSpecies() != null && !nvl(oldProfession.getSpecies()).equals(nvl(newProfession.getSpecies()))) { +// addChange("Les espèces cibles du métier sont passées de " + oldProfession.getSpecies() + " à " + newProfession.getSpecies()); +// } +// } +// + protected String nvl(String str) { + return str == null ? "" : str; + } +// +// @Override +// public void addChangeCompany(Company oldCompany, Company newCompany) { +// if (oldCompany != null) { +// String msg = "La ligne n'est plus associé à la société " + oldCompany.getName(); +// if (newCompany != null && !newCompany.equals(oldCompany)) { +// addChange(msg + " mais à la société " + newCompany.getName()); +// } else if (newCompany == null) { +// addChange(msg); +// } +// } else if (newCompany != null) { +// addChange("La ligne est désormais associé à la société " + newCompany.getName()); +// } +// } +// +// @Override +// public void addChangeProgram(String oldProgram, String newProgram) { +// if (!StringUtils.isEmpty(oldProgram)) { +// if (!oldProgram.equals(newProgram)) { +// addChange("La ligne n'est plus associé au programme " + oldProgram + " mais au programme " + newProgram); +// } +// } else if (!StringUtils.isEmpty(newProgram)) { +// addChange("La ligne est désormais associé au programme " + newProgram); +// } +// } +// +// @Override +// public void addChangePeriod(PeriodDates oldPeriod, PeriodDates newPeriod, String pattern) { +// DateFormat dateFormat = new SimpleDateFormat(pattern); +// String newPeriodBegin = dateFormat.format(newPeriod.getFromDate()); +// String newPeriodEnd = dateFormat.format(newPeriod.getThruDate()); +// if (oldPeriod == null) { +// addChange("La ligne est sur la période du " + newPeriodBegin + " au " + newPeriodEnd); +// return; +// } +// // dates inside oldPeriod and newPeriod can't be null +// String oldPeriodBegin = dateFormat.format(oldPeriod.getFromDate()); +// if (!oldPeriodBegin.equals(newPeriodBegin)) { +// addChange("La date de début est passé de " + oldPeriodBegin + " à " + newPeriodBegin); +// } +// String oldPeriodEnd = dateFormat.format(oldPeriod.getThruDate()); +// if (!oldPeriodEnd.equals(newPeriodEnd)) { +// addChange("La date de fin est passé de " + oldPeriodEnd + " à " + newPeriodEnd); +// } +// } +// +// @Override +// public void addChangeBoats(String oldBoats, String newBoats) { +// if (oldBoats.isEmpty() && !newBoats.isEmpty()) { +// addChange("La liste des immatriculations des navires est (" + newBoats + ")"); +// return; +// } +// +// if (!newBoats.isEmpty() && !oldBoats.equals(newBoats)) { +// addChange("La liste des immatriculations des navires est passé de (" + oldBoats + ") à (" + newBoats + ")"); +// } +// +// } +// +// @Override +// public void addNewBoats(List<Integer> newBoats) { +// if (!newBoats.isEmpty()) { +// addChange("Les navires suivant deviennent éligibles : " + newBoats); +// } +// } +// +// @Override +// public void addRemoveBoats(List<Integer> removedBoats) { +// if (!removedBoats.isEmpty()) { +// addChange("Les navires suivant ne sont plus éligibles : " + +// removedBoats); +// } +// } @Override - public void addChangeProfession(SampleRow oldSampleRow, SampleRow newSampleRow) { - Profession newProfession = newSampleRow.getProfession(); + public Date getCreateDate() { + return getTopiaCreateDate(); + } - if (oldSampleRow == null) { - addChange("Le métier de la ligne est " + newSampleRow.getProfessionDescription()); - if (newProfession.getLibelle() != null) { - addChange("Le libelle du métier est " + newProfession.getLibelle()); - } - if (newProfession.getSpecies() != null) { - addChange("Les espèces cibles du métier sont " + newProfession.getSpecies()); - } - return; - } + protected SampleRow oldRow; - if (!nvl(oldSampleRow.getProfessionDescription()).equals(nvl(newSampleRow.getProfessionDescription()))) { - addChange("Le métier de la ligne est passé de " + oldSampleRow.getProfessionDescription() - + " à " + newSampleRow.getProfessionDescription()); + protected SampleRow newRow; + + protected void compareNbObservers() { + // NbObservants + if (oldRow == null) { + addChange("Le nombre d'observateurs est de " + newRow.getNbObservants()); + } else if (oldRow.getNbObservants() != newRow.getNbObservants()) { + addChange("Le nombre d'observateurs est passé de " + oldRow.getNbObservants() + + " à " + newRow.getNbObservants()); } + } - Profession oldProfession = oldSampleRow.getProfession(); - if (newProfession.getLibelle() != null && !nvl(oldProfession.getLibelle()).equals(nvl(newProfession.getLibelle()))) { - addChange("Le libellé du métier est passé de " + oldProfession.getLibelle() + " à " + newProfession.getLibelle()); + protected void compareAverageTidesTimes() { + // AverageTideTime + if (oldRow == null) { + addChange("Le durée moyenne d'une marée est de " + newRow.getAverageTideTime()); + } else if (oldRow.getAverageTideTime() != newRow.getAverageTideTime()) { + addChange("La durée moyenne d'une marée est passé de " + oldRow.getAverageTideTime() + + " jours à " + newRow.getAverageTideTime()); } - if (newProfession.getSpecies() != null && !nvl(oldProfession.getSpecies()).equals(nvl(newProfession.getSpecies()))) { - addChange("Les espèces cibles du métier sont passées de " + oldProfession.getSpecies() + " à " + newProfession.getSpecies()); - } } - protected String nvl(String str) { - return str == null ? "" : str; + protected void compareTerrestrialLocations() { + if (ObjectUtils.notEqual(oldRow.getTerrestrialLocation(), newRow.getTerrestrialLocation())) { + addChange("Le lieu est passé de " + oldRow.getTerrestrialLocation().getDescription() + + " à " + newRow.getTerrestrialLocation().getDescription()); + } } - @Override - public void addChangeCompany(Company oldCompany, Company newCompany) { + protected void compareCompanies() { + Company oldCompany = oldRow == null ? null : oldRow.getCompany(); + Company newCompany = newRow.getCompany(); if (oldCompany != null) { - String msg = "La ligne n'est plus associé à la société " + oldCompany.getName(); + String msg = "La ligne n'est plus associée à la société " + oldCompany.getName(); if (newCompany != null && !newCompany.equals(oldCompany)) { addChange(msg + " mais à la société " + newCompany.getName()); } else if (newCompany == null) { addChange(msg); } } else if (newCompany != null) { - addChange("La ligne est désormais associé à la société " + newCompany.getName()); + addChange("La ligne est désormais associée à la société " + newCompany.getName()); } } - @Override - public void addChangeProgram(String oldProgram, String newProgram) { + protected void comparePrograms() { + String oldProgram = oldRow == null ? null : oldRow.getProgramName(); + String newProgram = newRow.getProgramName(); if (!StringUtils.isEmpty(oldProgram)) { if (!oldProgram.equals(newProgram)) { - addChange("La ligne n'est plus associé au programme " + oldProgram + " mais au programme " + newProgram); + addChange("La ligne n'est plus associée au programme " + oldProgram + " mais au programme " + newProgram); } } else if (!StringUtils.isEmpty(newProgram)) { - addChange("La ligne est désormais associé au programme " + newProgram); + addChange("La ligne est désormais associée au programme " + newProgram); } } - @Override - public void addChangePeriod(PeriodDates oldPeriod, PeriodDates newPeriod, String pattern) { - DateFormat dateFormat = new SimpleDateFormat(pattern); - String newPeriodBegin = dateFormat.format(newPeriod.getFromDate()); - String newPeriodEnd = dateFormat.format(newPeriod.getThruDate()); - if (oldPeriod == null) { + protected void comparePeriods() { + DateFormat dateFormat = new SimpleDateFormat(DateUtil.MONTH_PATTERN); + + String newPeriodBegin = dateFormat.format(newRow.getPeriodBegin()); + String newPeriodEnd = dateFormat.format(newRow.getPeriodEnd()); + if (oldRow == null) { addChange("La ligne est sur la période du " + newPeriodBegin + " au " + newPeriodEnd); + } else { + String oldPeriodBegin = dateFormat.format(oldRow.getPeriodBegin()); + if (!oldPeriodBegin.equals(newPeriodBegin)) { + addChange("La date de début est passée de " + oldPeriodBegin + " à " + newPeriodBegin); + } + + String oldPeriodEnd = dateFormat.format(oldRow.getPeriodEnd()); + if (!oldPeriodEnd.equals(newPeriodEnd)) { + addChange("La date de fin est passée de " + oldPeriodEnd + " à " + newPeriodEnd); + } + } + } + + protected void compareProfession() { + Profession newProfession = newRow.getProfession(); + + if (oldRow == null) { + addChange("Le métier de la ligne est " + newRow.getProfessionDescription()); + if (newProfession.getLibelle() != null) { + addChange("Le libelle du métier est " + newProfession.getLibelle()); + } + if (newProfession.getSpecies() != null) { + addChange("Les espèces cibles du métier sont " + newProfession.getSpecies()); + } return; } - // dates inside oldPeriod and newPeriod can't be null - String oldPeriodBegin = dateFormat.format(oldPeriod.getFromDate()); - if (!oldPeriodBegin.equals(newPeriodBegin)) { - addChange("La date de début est passé de " + oldPeriodBegin + " à " + newPeriodBegin); + + if (!nvl(oldRow.getProfessionDescription()).equals(nvl(newRow.getProfessionDescription()))) { + addChange("Le métier de la ligne est passé de " + oldRow.getProfessionDescription() + + " à " + newRow.getProfessionDescription()); } - String oldPeriodEnd = dateFormat.format(oldPeriod.getThruDate()); - if (!oldPeriodEnd.equals(newPeriodEnd)) { - addChange("La date de fin est passé de " + oldPeriodEnd + " à " + newPeriodEnd); + + Profession oldProfession = oldRow.getProfession(); + if (newProfession.getLibelle() != null && !nvl(oldProfession.getLibelle()).equals(nvl(newProfession.getLibelle()))) { + addChange("Le libellé du métier est passé de " + oldProfession.getLibelle() + " à " + newProfession.getLibelle()); } + if (newProfession.getSpecies() != null && !nvl(oldProfession.getSpecies()).equals(nvl(newProfession.getSpecies()))) { + addChange("Les espèces cibles du métier sont passées de " + oldProfession.getSpecies() + " à " + newProfession.getSpecies()); + } } - @Override - public void addChangeBoats(String oldBoats, String newBoats) { - if (oldBoats.isEmpty() && !newBoats.isEmpty()) { - addChange("La liste des immatriculations des navires est (" + newBoats + ")"); - return; + protected void compareSampleMonths() { + DateFormat dateFormat = new SimpleDateFormat(DateUtil.MONTH_PATTERN); + +// Map<String, SampleMonth> oldMonths = new HashMap<String, SampleMonth>(); +// for (SampleMonth month : oldRow.getSampleMonth()) { +// oldMonths.put(month.getTopiaId(), month); +// } + + Map<String, SampleMonth> oldMonths; + if (oldRow == null) { + oldMonths = Collections.emptyMap(); + } else { + oldMonths = WaoUtils.projectPropertyUnique(oldRow.getSampleMonth(), SampleMonth.TOPIA_ID); } - - if (!newBoats.isEmpty() && !oldBoats.equals(newBoats)) { - addChange("La liste des immatriculations des navires est passé de (" + oldBoats + ") à (" + newBoats + ")"); + + List<SampleMonth> newMonths = newRow.getSampleMonth(); + for (SampleMonth oldMonth : oldMonths.values()) { + if ( ! newMonths.contains(oldMonth)) { + String date = dateFormat.format(oldMonth.getPeriodDate()); + addChange("Le mois " + date + " a été supprimé, " + + "l'ancienne valeur d'effort était " + oldMonth.getExpectedTidesValue()); + } } - + for (SampleMonth month : newMonths) { + boolean monthCreated = ! oldMonths.containsKey(month.getTopiaId()); + String date = dateFormat.format(month.getPeriodDate()); + if (monthCreated) { + // log create month + addChange("Le mois " + date + " a été créé avec un nombre de marées de " + + month.getExpectedTidesValue()); + } else { + SampleMonth oldMonth = oldMonths.get(month.getTopiaId()); + if (oldMonth.getExpectedTidesValue() != month.getExpectedTidesValue()) { + // log change month value + addChange("Le nombre de marées du mois " + date + " est passé de " + + oldMonth.getExpectedTidesValue() + " à " + month.getExpectedTidesValue()); + } + } + } } - @Override - public void addNewBoats(List<Integer> newBoats) { - if (!newBoats.isEmpty()) { - addChange("Les navires suivant deviennent éligibles : " + newBoats); + protected void compareEligibleBoats() { + List<ElligibleBoat> oldEligibleBoats; + if (oldRow == null) { + oldEligibleBoats = Collections.emptyList(); + } else { + oldEligibleBoats = oldRow.getElligibleBoat(); } + List<ElligibleBoat> newEligibleBoats = newRow.getElligibleBoat(); + + // Lists for boats by status + List<Integer> noLongerEligibleBoats = new ArrayList<Integer>(); + List<Integer> stillEligibleBoats = new ArrayList<Integer>(); + List<Integer> newlyEligibleBoats = new ArrayList<Integer>(); + + // filling the three lists + for (ElligibleBoat oldEligibleBoat : oldEligibleBoats) { + if ( ! newEligibleBoats.contains(oldEligibleBoat)) { + noLongerEligibleBoats.add(oldEligibleBoat.getBoat().getImmatriculation()); + } + } + for (ElligibleBoat newEligibleBoat : newEligibleBoats) { + if (oldEligibleBoats.contains(newEligibleBoat)) { + stillEligibleBoats.add(newEligibleBoat.getBoat().getImmatriculation()); + } else { + newlyEligibleBoats.add(newEligibleBoat.getBoat().getImmatriculation()); + } + } + + // using the three list to add info + if ( ! noLongerEligibleBoats.isEmpty()) { + addChange("Les navires suivants ne sont plus éligibles : " + + StringUtils.join(noLongerEligibleBoats, ", ")); + } + if ( ! stillEligibleBoats.isEmpty()) { + addChange("Les navires suivants sont toujours éligibles ; " + + StringUtils.join(stillEligibleBoats, ", ")); + } + if ( ! newlyEligibleBoats.isEmpty()) { + addChange("Les navires suivants deviennent éligibles : " + + StringUtils.join(newlyEligibleBoats, ", ")); + } } - @Override - public void addRemoveBoats(List<Integer> removedBoats) { - if (!removedBoats.isEmpty()) { - addChange("Les navires suivant ne sont plus éligibles : " + - removedBoats); + protected void compareFishingZones() { + List<FishingZone> oldFishingZones; + if (oldRow == null) { + oldFishingZones = Collections.emptyList(); + } else { + oldFishingZones = oldRow.getFishingZone(); } + List<FishingZone> newFishingZones = newRow.getFishingZone(); + + // Lists for boats by status + List<String> removedZones = new ArrayList<String>(); + List<String> keptZones = new ArrayList<String>(); + List<String> addedZones = new ArrayList<String>(); + + // filling the three lists + for (FishingZone oldFishingZone : oldFishingZones) { + if ( ! newFishingZones.contains(oldFishingZone)) { + removedZones.add(oldFishingZone.getCode()); + } + } + for (FishingZone newFishingZone : newFishingZones) { + if (oldFishingZones.contains(newFishingZone)) { + keptZones.add(newFishingZone.getCode()); + } else { + addedZones.add(newFishingZone.getCode()); + } + } + + // using the three list to add info + if ( ! removedZones.isEmpty()) { + addChange("Les zones de pêches suivantes ont été dissociées : " + + StringUtils.join(removedZones, ", ")); + } + if ( ! keptZones.isEmpty()) { + addChange("Les zones de pêches suivantes sont toujours associées : " + + StringUtils.join(keptZones, ", ")); + } + if ( ! addedZones.isEmpty()) { + addChange("Les zones de pêches suivantes ont été ajoutées : " + + StringUtils.join(addedZones, ", ")); + } } - @Override - public Date getCreateDate() { - return getTopiaCreateDate(); + /** Compare a sample row before and after its modifications and generate + * a differences summary and save it by setting log text. + */ + public void setLogText(SampleRow oldRow, SampleRow newRow) { + + if (newRow == null) { + throw new IllegalArgumentException("newRow is null"); + } + + if (oldRow != null) { + // it's a non-sense to compare two rows of two different programs + // or two rows distinct from a business PoV + boolean comparable = oldRow.getCode().equals(newRow.getCode()) + && oldRow.getObsProgram().equals(newRow.getObsProgram()); + + if ( ! comparable) { + throw new IllegalArgumentException("given rows are not comparable"); + } + } + + this.oldRow = oldRow; + this.newRow = newRow; + + ObsProgram obsProgram = newRow.getObsProgram(); + if (ObsProgram.OBSMER.equals(obsProgram)) { + compareNbObservers(); + compareAverageTidesTimes(); + comparePrograms(); + comparePeriods(); + compareProfession(); + compareSampleMonths(); + compareEligibleBoats(); + compareFishingZones(); + } + if (ObsProgram.OBSVENTE.equals(obsProgram)) { + compareTerrestrialLocations(); + comparePrograms(); + comparePeriods(); + compareProfession(); + compareSampleMonths(); + compareEligibleBoats(); + compareFishingZones(); + } + if (ObsProgram.OBSDEB.equals(obsProgram)) { + + } + compareCompanies(); + + this.oldRow = null; + this.newRow = null; } - } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-02 13:11:44 UTC (rev 1050) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-02 19:31:34 UTC (rev 1051) @@ -226,165 +226,201 @@ @Override public void executeCreateUpdateSampleRow(TopiaContext transaction, SampleRow row, List<Boat> boats, SampleRowLog rowLog) - throws Exception { - TopiaContext transaction2 = null; - try { + throws Exception { - SampleRowLogDAO logDAO = WaoDAOHelper.getSampleRowLogDAO(transaction); - context.prepareTopiaId(SampleRowLog.class, rowLog); - logDAO.update(rowLog); - - boolean newRow = context.prepareTopiaId(SampleRow.class, row); - - if (log.isDebugEnabled()) { - log.debug("new sampleRow : " + newRow); - log.debug("samplRow topiaId : " + row.getTopiaId()); + // prepare some stuffs for persistence + for (SampleMonth sampleMonth : row.getSampleMonth()) { + if (sampleMonth.getTopiaId() == null) { + context.prepareTopiaId(SampleMonth.class, sampleMonth); } + } - String pattern = DateUtil.MONTH_PATTERN; - DateFormat dateFormat = new SimpleDateFormat(pattern); + ProfessionDAO professionDAO = WaoDAOHelper.getProfessionDAO(transaction); + if (row.getProfession().getTopiaId() == null) { + context.prepareTopiaId(Profession.class, row.getProfession()); + } + professionDAO.update(row.getProfession()); - SampleRow oldRow = null; - Profession oldProfession = null; - Company oldCompany = null; - Map<String, SampleMonth> oldMonths = new HashMap<String, SampleMonth>(); - List<FishingZone> oldZones = new ArrayList<FishingZone>(); - transaction2 = context.beginTransaction(); - // UPDATE - if (!newRow) { - // Prepare data for logging or deleting oldMonths - SampleRowDAO oldDAO = WaoDAOHelper.getSampleRowDAO(transaction2); - oldRow = oldDAO.findByTopiaId(row.getTopiaId()); - oldCompany = oldRow.getCompany(); - oldProfession = oldRow.getProfession(); - for (SampleMonth month : oldRow.getSampleMonth()) { - oldMonths.put(month.getTopiaId(), month); - } - oldZones = oldRow.getFishingZone(); + if (row.getDCF5Code() != null) { + row.setDCF5Code(insertOrSelect(transaction, row.getDCF5Code())); + } - // NbObservants - if (oldRow.getNbObservants() != row.getNbObservants()) { - rowLog.addChange("Le nombre d'observateurs est passé de " + oldRow.getNbObservants() + " à " + row.getNbObservants()); - } - // AverageTideTime - if (oldRow.getAverageTideTime() != row.getAverageTideTime()) { - rowLog.addChange("La durée moyenne d'une marée est passé de " + oldRow.getAverageTideTime() + " jours à " + row.getAverageTideTime()); - } + updateElligibleBoats(transaction, row, boats); - if (ObjectUtils.notEqual(oldRow.getTerrestrialLocation(), row.getTerrestrialLocation())) { - rowLog.addChange("Le lieu est passé de " + oldRow.getTerrestrialLocation().getDescription() + " à " - + row.getTerrestrialLocation().getDescription()); - } - } else { - rowLog.addChange("Le nombre d'observateurs est " + row.getNbObservants()); - rowLog.addChange("La durée moyenne d'une marée est " + row.getAverageTideTime()); + SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction); + boolean rowIsNew = row.getTopiaId() == null; + if (rowIsNew) { + dao.create(row); + } else { + SampleRow oldRow = getSampleRow(row.getTopiaId()); + if (rowLog.getTopiaId() == null) { + context.prepareTopiaId(SampleRowLog.class, rowLog); } - // ChangeLog Company - rowLog.addChangeCompany(oldCompany, row.getCompany()); - // ChangeLog Program - String oldProgram = oldRow != null ? oldRow.getProgramName() : null; - rowLog.addChangeProgram(oldProgram, row.getProgramName()); - // ChangeLog Period - PeriodDates oldPeriod = null; - if (oldRow != null) { - oldPeriod = new PeriodDates(oldRow.getPeriodBegin(), oldRow.getPeriodEnd()); - } - PeriodDates newPeriod = new PeriodDates(row.getPeriodBegin(), row.getPeriodEnd()); - rowLog.addChangePeriod(oldPeriod, newPeriod, pattern); + rowLog.setLogText(oldRow, row); + row.addSampleRowLog(rowLog); + dao.update(row); + } - // before saving profession - if (row.getDCF5Code() != null) { - row.setDCF5Code(insertOrSelect(transaction, row.getDCF5Code())); - } + transaction.commitTransaction(); - // Save Profession - ProfessionDAO professionDAO = WaoDAOHelper.getProfessionDAO(transaction); - context.prepareTopiaId(Profession.class, row.getProfession()); - rowLog.addChangeProfession(oldRow, row); - professionDAO.update(row.getProfession()); - - // Save sampleMonth - SampleMonthDAO monthDAO = WaoDAOHelper.getSampleMonthDAO(transaction); - - // Delete oldMonths - List<SampleMonth> newMonths = row.getSampleMonth(); - for (SampleMonth oldMonth : oldMonths.values()) { - if (!newMonths.contains(oldMonth)) { - String date = dateFormat.format(oldMonth.getPeriodDate()); - // Delete old month : add to log - monthDAO.delete(oldMonth); - rowLog.addChange("Le mois " + date + " a été supprimé, " + - "l'ancienne valeur d'effort était " + oldMonth.getExpectedTidesValue()); - } - } - // Create or update months - for (SampleMonth month : newMonths) { - boolean monthCreated = context.prepareTopiaId(SampleMonth.class, month); - String date = dateFormat.format(month.getPeriodDate()); - if (monthCreated) { - // log create month - rowLog.addChange("Le mois " + date + " a été créé avec un nombre de marées de " + month.getExpectedTidesValue()); - } else { - SampleMonth oldMonth = oldMonths.get(month.getTopiaId()); - if (oldMonth.getExpectedTidesValue() != month.getExpectedTidesValue()) { - // log change month value - rowLog.addChange("Le nombre de marées du mois " + date + " est passé de " + - oldMonth.getExpectedTidesValue() + " à " + month.getExpectedTidesValue()); - } - } - monthDAO.update(month); - } - - List<List<Integer>> immatriculations = - updateElligibleBoats(transaction, row, boats); - - // ChangeLog boats (index=0 for removed, index=1 for new) - rowLog.addRemoveBoats(immatriculations.get(0)); - rowLog.addNewBoats(immatriculations.get(1)); - -// String oldBoats = oldRow != null ? oldRow.getMainElligibleBoatsAsString() : ""; +// TopiaContext transaction2 = null; +// try { +// +// SampleRowLogDAO logDAO = WaoDAOHelper.getSampleRowLogDAO(transaction); +// context.prepareTopiaId(SampleRowLog.class, rowLog); +// logDAO.update(rowLog); +// +// boolean isNewRow = context.prepareTopiaId(SampleRow.class, row); +// +// if (log.isDebugEnabled()) { +// log.debug("new sampleRow : " + isNewRow); +// log.debug("samplRow topiaId : " + row.getTopiaId()); +// } +// +// String pattern = DateUtil.MONTH_PATTERN; +// DateFormat dateFormat = new SimpleDateFormat(pattern); +// +// SampleRow oldRow = null; +// Profession oldProfession = null; +// Company oldCompany = null; +// Map<String, SampleMonth> oldMonths = new HashMap<String, SampleMonth>(); +// List<FishingZone> oldZones = new ArrayList<FishingZone>(); +// transaction2 = context.beginTransaction(); +// // UPDATE +// if (!isNewRow) { +// // Prepare data for logging or deleting oldMonths +// SampleRowDAO oldDAO = WaoDAOHelper.getSampleRowDAO(transaction2); +// oldRow = oldDAO.findByTopiaId(row.getTopiaId()); +// oldCompany = oldRow.getCompany(); +// oldProfession = oldRow.getProfession(); +// for (SampleMonth month : oldRow.getSampleMonth()) { +// oldMonths.put(month.getTopiaId(), month); +// } +// oldZones = oldRow.getFishingZone(); +// +// // NbObservants +// if (oldRow.getNbObservants() != row.getNbObservants()) { +// rowLog.addChange("Le nombre d'observateurs est passé de " + oldRow.getNbObservants() + " à " + row.getNbObservants()); +// } +// // AverageTideTime +// if (oldRow.getAverageTideTime() != row.getAverageTideTime()) { +// rowLog.addChange("La durée moyenne d'une marée est passé de " + oldRow.getAverageTideTime() + " jours à " + row.getAverageTideTime()); +// } +// +// if (ObjectUtils.notEqual(oldRow.getTerrestrialLocation(), row.getTerrestrialLocation())) { +// rowLog.addChange("Le lieu est passé de " + oldRow.getTerrestrialLocation().getDescription() + " à " +// + row.getTerrestrialLocation().getDescription()); +// } +// } else { +// rowLog.addChange("Le nombre d'observateurs est " + row.getNbObservants()); +// rowLog.addChange("La durée moyenne d'une marée est " + row.getAverageTideTime()); +// } +// // ChangeLog Company +// rowLog.addChangeCompany(oldCompany, row.getCompany()); +// // ChangeLog Program +// String oldProgram = oldRow != null ? oldRow.getProgramName() : null; +// rowLog.addChangeProgram(oldProgram, row.getProgramName()); +// // ChangeLog Period +// PeriodDates oldPeriod = null; +// if (oldRow != null) { +// oldPeriod = new PeriodDates(oldRow.getPeriodBegin(), oldRow.getPeriodEnd()); +// } +// PeriodDates newPeriod = new PeriodDates(row.getPeriodBegin(), row.getPeriodEnd()); +// rowLog.addChangePeriod(oldPeriod, newPeriod, pattern); +// +// // before saving profession +// if (row.getDCF5Code() != null) { +// row.setDCF5Code(insertOrSelect(transaction, row.getDCF5Code())); +// } +// +// // Save Profession +// ProfessionDAO professionDAO = WaoDAOHelper.getProfessionDAO(transaction); +// context.prepareTopiaId(Profession.class, row.getProfession()); +// rowLog.addChangeProfession(oldRow, row); +// professionDAO.update(row.getProfession()); +// +// // Save sampleMonth +// SampleMonthDAO monthDAO = WaoDAOHelper.getSampleMonthDAO(transaction); +// +// // Delete oldMonths +// List<SampleMonth> newMonths = row.getSampleMonth(); +// for (SampleMonth oldMonth : oldMonths.values()) { +// if (!newMonths.contains(oldMonth)) { +// String date = dateFormat.format(oldMonth.getPeriodDate()); +// // Delete old month : add to log +// monthDAO.delete(oldMonth); +// rowLog.addChange("Le mois " + date + " a été supprimé, " + +// "l'ancienne valeur d'effort était " + oldMonth.getExpectedTidesValue()); +// } +// } +// // Create or update months +// for (SampleMonth month : newMonths) { +// boolean monthCreated = context.prepareTopiaId(SampleMonth.class, month); +// String date = dateFormat.format(month.getPeriodDate()); +// if (monthCreated) { +// // log create month +// rowLog.addChange("Le mois " + date + " a été créé avec un nombre de marées de " + month.getExpectedTidesValue()); +// } else { +// SampleMonth oldMonth = oldMonths.get(month.getTopiaId()); +// if (oldMonth.getExpectedTidesValue() != month.getExpectedTidesValue()) { +// // log change month value +// rowLog.addChange("Le nombre de marées du mois " + date + " est passé de " + +// oldMonth.getExpectedTidesValue() + " à " + month.getExpectedTidesValue()); +// } +// } +// monthDAO.update(month); +// } +// +// List<List<Integer>> immatriculations = +// updateElligibleBoats(transaction, row, boats); +// +// // ChangeLog boats (index=0 for removed, index=1 for new) +// rowLog.addRemoveBoats(immatriculations.get(0)); // rowLog.addNewBoats(immatriculations.get(1)); - - - // Remove no longer linked FishingZone - List<FishingZone> newZones = row.getFishingZone(); - for (FishingZone oldZone : oldZones) { - if (!newZones.contains(oldZone)) { -// updateFishingZones(transaction, oldZone.getTopiaId(), row, true); - rowLog.addChange("La zone de pêche " + oldZone.getCode() + " a été dissociée de la ligne"); - } - } - // Add new linked FishingZone - // ConcurrentModificationException ???? - for (FishingZone zone : new ArrayList<FishingZone>(newZones)) { - if (!oldZones.contains(zone)) { -// updateFishingZones(transaction, zone.getTopiaId(), row, false); - rowLog.addChange("La zone de pêche " + zone.getCode() + " a été associée à la ligne"); - } - } - - // Save sampleRow : create or update - SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); - if (log.isDebugEnabled()) { - log.debug("update row : " + row); - } - // Not useful, sampleRowLog is instantiate using getNewSampleRowLog(SampleRow, ConnectedUser); - rowLog.setSampleRow(row); - rowLog.setFromAdmin(true); - - rowDAO.update(row); - - if (log.isDebugEnabled()) { - log.debug("Change log : " + rowLog.getLogText()); - log.debug("commit transaction !"); - } - transaction.commitTransaction(); - - } catch (Exception eee) { - throw eee; - } finally { - transaction2.closeContext(); - } +// +//// String oldBoats = oldRow != null ? oldRow.getMainElligibleBoatsAsString() : ""; +//// rowLog.addNewBoats(immatriculations.get(1)); +// +// +// // Remove no longer linked FishingZone +// List<FishingZone> newZones = row.getFishingZone(); +// for (FishingZone oldZone : oldZones) { +// if (!newZones.contains(oldZone)) { +//// updateFishingZones(transaction, oldZone.getTopiaId(), row, true); +// rowLog.addChange("La zone de pêche " + oldZone.getCode() + " a été dissociée de la ligne"); +// } +// } +// // Add new linked FishingZone +// // ConcurrentModificationException ???? +// for (FishingZone zone : new ArrayList<FishingZone>(newZones)) { +// if (!oldZones.contains(zone)) { +//// updateFishingZones(transaction, zone.getTopiaId(), row, false); +// rowLog.addChange("La zone de pêche " + zone.getCode() + " a été associée à la ligne"); +// } +// } +// +// // Save sampleRow : create or update +// SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction); +// if (log.isDebugEnabled()) { +// log.debug("update row : " + row); +// } +// // Not useful, sampleRowLog is instantiate using getNewSampleRowLog(SampleRow, ConnectedUser); +// rowLog.setSampleRow(row); +// rowLog.setFromAdmin(true); +// +// rowDAO.update(row); +// +// if (log.isDebugEnabled()) { +// log.debug("Change log : " + rowLog.getLogText()); +// log.debug("commit transaction !"); +// } +// transaction.commitTransaction(); +// +// } catch (Exception eee) { +// throw eee; +// } finally { +// transaction2.closeContext(); +// } } /** @@ -591,6 +627,7 @@ result.sizeSampleMonth(); result.sizeElligibleBoat(); + result.sizeSampleRowLog(); if (result.getObsProgram() == ObsProgram.OBSVENTE) { // load specific field 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-03-02 13:11:44 UTC (rev 1050) +++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-03-02 19:31:34 UTC (rev 1051) @@ -1,160 +1,160 @@ ContactPieChartConstant.OTHER=Autres -ContactPieChartConstant.REALIZED=R\u00e9alis\u00e9s -ContactPieChartConstant.REFUSED=Refus\u00e9s -ContactState.CONTACT_DEFINITELY_REFUSED=Refus d\u00e9finitif +ContactPieChartConstant.REALIZED=R\u00E9alis\u00E9s +ContactPieChartConstant.REFUSED=Refus\u00E9s +ContactState.CONTACT_DEFINITELY_REFUSED=Refus d\u00E9finitif 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 -DataReliability.CORRECTION_ASKED=Correction demand\u00e9e +ContactState.OBSERVATION_CANCELLED=Annul\u00E9e +ContactState.OBSERVATION_DONE=Observation r\u00E9alis\u00E9e +ContactState.OBSERVATION_EXPECTED=Observation programm\u00E9e +DataReliability.CORRECTION_ASKED=Correction demand\u00E9e DataReliability.DOUBTFUL=Douteuse -DataReliability.NOT_PROVIDED=Non contr\u00f4l\u00e9e +DataReliability.NOT_PROVIDED=Non contr\u00F4l\u00E9e DataReliability.NOT_RELIABLE=Non exploitable DataReliability.RELIABLE=Exploitable DataReliability.UNKNOWN=Inconnue -GlobalIndicatorValue.BAD=P\u00e9nalit\u00e9 de niveau 1 +GlobalIndicatorValue.BAD=P\u00E9nalit\u00E9 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\u00E9nalit\u00E9 de niveau 2 GlobalIndicatorValue.VERY_GOOD=Bonus de niveau 2 -LocationType.AUCTION=Cri\u00e9e +LocationType.AUCTION=Cri\u00E9e LocationType.PORT=Port ObsProgram.OBSDEB=ObsDeb ObsProgram.OBSMER=ObsMer ObsProgram.OBSVENTE=ObsVente -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.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 +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.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 UserRole.ADMIN=Administrateur UserRole.COORDINATOR=Coordinateur -UserRole.GUEST=Invit\u00e9 +UserRole.GUEST=Invit\u00E9 UserRole.OBSERVER=Observateur UserRole.PROFESSIONAL=Professionnel -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\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.FPO=Nasses (casiers) -fr.ifremer.wao.entity.FishingGearDCF.FSN=Filets \u00e0 l'\u00e9talage (diables) +fr.ifremer.wao.entity.FishingGearDCF.FSN=Filets \u00E0 l'\u00E9talage (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\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.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\u00E9rivants (filets d\u00E9rivants) 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\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.HAR=Harpons -fr.ifremer.wao.entity.FishingGearDCF.HMD=Dragues m\u00e9canis\u00e9es +fr.ifremer.wao.entity.FishingGearDCF.HMD=Dragues m\u00E9canis\u00E9es 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\u00E9colte (non sp\u00E9cifi\u00E9s) 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 \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.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\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.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.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.PTM=Chalut-b\u0153ufs p\u00E9lagiques +fr.ifremer.wao.entity.FishingGearDCF.RG=Engins de p\u00EAche r\u00E9vr\u00E9ative 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\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.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\u00E8ces catadromes +fr.ifremer.wao.entity.TargetSpeciesDCF.CRU=Crustac\u00E9s 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\u00E8ces d\u00E9mersales +fr.ifremer.wao.entity.TargetSpeciesDCF.DWS=Esp\u00E8ces 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\u00E9lagiques fr.ifremer.wao.entity.TargetSpeciesDCF.MOL=Mollusques -fr.ifremer.wao.entity.TargetSpeciesDCF.SPF=Petits p\u00e9lagiques -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\u00E9lagiques +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 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\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.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\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.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\u00E9cup\u00E9ration 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\u00E9marrage 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\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.serviceBoat.getActivityCalendarLogAccessFile= wao.error.serviceBoat.getActivityCalendarLogFile= 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\u00E9cup\u00E9rer 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\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.getNbBoatsByFilter=Impossible de filtrer la liste des navires 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 \: [ NAVS_COD,CARN_NOM,CARN_LONGUEUR_HT,CARN_ANNEE,QUARTIER_IMMA,PER_COD,PER_NOM,PER_PRENOM,NAVS_ACTIVE ]. Voir documentation pour plus de d\u00e9tails. +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 \: [ NAVS_COD,CARN_NOM,CARN_LONGUEUR_HT,CARN_ANNEE,QUARTIER_IMMA,PER_COD,PER_NOM,PER_PRENOM,NAVS_ACTIVE ]. Voir documentation pour plus de d\u00E9tails. 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\u00E9es des quartiers des navires. V\u00E9rifiez 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\u00E9s wao.error.serviceContact.getNewContact=Impossible d'instancier un nouveau contact wao.error.serviceContact.importContactCsv=Impossible d'importer les contacts wao.error.serviceContact.saveComment= @@ -163,66 +163,66 @@ 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\u00E9cup\u00E9rer 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.getAllTerrestrialDistricts= 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\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.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\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.importInitialContactStateMotifs= wao.error.serviceReferential.importTerrestrialDivisions= wao.error.serviceReferential.importTerrestrialLocations= wao.error.serviceReferential.updateAllContactStatesMotifs= 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'\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.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\u00E9cup\u00E9rer un nouveau code pour une ligne d'\u00E9chantillonnage wao.error.serviceSampling.getNewSampleRowLog= 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.getSampleRowsOrderedByFishingZone=Impossible de r\u00e9cup\u00e9rer la liste des lignes du plan d'\u00e9chantillonnage -wao.error.serviceSampling.importSamplingPlanCsv=Erreur \u00e0 la ligne %1$d [CODE \= %2$s] +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.getSampleRowsOrderedByFishingZone=Impossible de r\u00E9cup\u00E9rer la liste des lignes du plan d'\u00E9chantillonnage +wao.error.serviceSampling.importSamplingPlanCsv=Erreur \u00E0 la ligne %1$d [CODE \= %2$s] 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\u00E9cup\u00E9rer les donn\u00E9es du graphique concernant les embarquements sur les navires 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\u00E9cup\u00E9rer l'indicateur de r\u00E9activit\u00E9 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\u00E9cup\u00E9rer les statistiques sur les \u00E9tats 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.getGlobalSynthesisParameters=Impossible de r\u00e9cup\u00e9rer les donn\u00e9es concernant les indicateurs pour la synth\u00e8se globale +wao.error.serviceSynthesis.getDataSampling=Impossible de r\u00E9cup\u00E9rer les donn\u00E9es pour le graphique dynamique des efforts de mar\u00E9es +wao.error.serviceSynthesis.getGlobalSynthesisParameters=Impossible de r\u00E9cup\u00E9rer les donn\u00E9es concernant les indicateurs pour la synth\u00E8se 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.updateGlobalSynthesisParameters=Impossible de mettre \u00e0 jour les param\u00e8tres de la synth\u00e8se globale +wao.error.serviceSynthesis.getNonComplianceBoardingIndicator=Impossible de r\u00E9cup\u00E9rer l'indicateur de non respect du nombre d'observateurs embarqu\u00E9s +wao.error.serviceSynthesis.updateGlobalSynthesisParameters=Impossible de mettre \u00E0 jour les param\u00E8tres de la synth\u00E8se globale 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\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.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\u00E9cup\u00E9rer la liste des soci\u00E9t\u00E9s wao.error.serviceUser.getCompany= 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\u00E9cup\u00E9rer la liste des observateurs 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\u00E9cup\u00E9rer la liste des utilisateurs de la soci\u00E9t\u00E9 %1$s Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Added: trunk/wao-business/src/test/java/fr/ifremer/wao/entity/SampleRowLogTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/entity/SampleRowLogTest.java (rev 0) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/entity/SampleRowLogTest.java 2011-03-02 19:31:34 UTC (rev 1051) @@ -0,0 +1,108 @@ +package fr.ifremer.wao.entity; + +import fr.ifremer.wao.bean.ObsProgram; +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.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Collections; + +public class SampleRowLogTest { + + private static final Logger log = + LoggerFactory.getLogger(SampleRowLogTest.class); + + protected SampleRow nullSampleRow; + + protected SampleRow sampleRow; + + protected SampleRow newEmptySampleRow() { + SampleRow sampleRow = new SampleRowImpl(); + sampleRow.setObsProgram(ObsProgram.OBSMER); + sampleRow.setCode("1"); + + sampleRow.setPeriodBegin(DateUtil.createDate(1, 3, 2011)); + sampleRow.setPeriodEnd(DateUtil.createDate(1, 6, 2011)); + sampleRow.setProfession(new ProfessionImpl()); + sampleRow.setSampleMonth(Collections.<SampleMonth>emptyList()); + sampleRow.setElligibleBoat(Collections.<ElligibleBoat>emptyList()); + sampleRow.setFishingZone(new ArrayList<FishingZone>()); + return sampleRow; + } + + @Before + public void setUp() throws Exception { + nullSampleRow = new SampleRowImpl(); + nullSampleRow.setObsProgram(ObsProgram.OBSMER); + nullSampleRow.setCode("1"); + + sampleRow = newEmptySampleRow(); + } + + /** + * comparison to an empty sample row should not generate error. + * test show that no NPE is thrown + */ + @Test + public void testNewSampleRowLog() { + SampleRowLog sampleRowLog = new SampleRowLogImpl(); + sampleRowLog.setLogText(null, sampleRow); + + if (log.isDebugEnabled()) { + log.debug(sampleRowLog.getLogText()); + } + } + + /** + * Comparing a row to it-self should be OK and generate an empty log + */ + @Test + public void testCompareSampleRowToItself() { + SampleRowLog sampleRowLog = new SampleRowLogImpl(); + sampleRowLog.setLogText(sampleRow, sampleRow); + + Assert.assertTrue("comparing a sample-row to itself should not generate text", + StringUtils.isEmpty(sampleRowLog.getLogText())); + + if (log.isDebugEnabled()) { + log.debug(sampleRowLog.getLogText()); + } + } + + @Test + public void testModifySampleRow() { + + // Create a new sample-row with the sampleRow + // as initial state + SampleRow newSampleRow = newEmptySampleRow(); + + // do some modifications + newSampleRow.setAverageTideTime(1.0); + newSampleRow.setProgramName("programName"); + FishingZone fishingZone = new FishingZoneImpl(); + fishingZone.setDistrictCode("IV"); + newSampleRow.addFishingZone(fishingZone); + newSampleRow.setPeriodEnd(DateUtil.createDate(1, 7, 2011)); + + // now create a log that should summarize the modifications done + SampleRowLog sampleRowLog = new SampleRowLogImpl(); + sampleRowLog.setLogText(sampleRow, newSampleRow); + + if (log.isDebugEnabled()) { + log.debug(sampleRowLog.getLogText()); + } + + // now check that generated log contains all needed info about + // the modifications done above + String text = sampleRowLog.getLogText(); + Assert.assertTrue("log mention new fishing zone", text.contains("IV")); + Assert.assertTrue("log mention new program name", text.contains("programName")); + Assert.assertTrue("log mention date change with old and new values", text.contains("06/2011") + && text.contains("07/2011")); + } +} Added: trunk/wao-business/src/test/resources/import/samplingPlan-obsdeb.csv =================================================================== --- trunk/wao-business/src/test/resources/import/samplingPlan-obsdeb.csv (rev 0) +++ trunk/wao-business/src/test/resources/import/samplingPlan-obsdeb.csv 2011-03-02 19:31:34 UTC (rev 1051) @@ -0,0 +1,3 @@ +PLAN_CODE;REGION_IFREMER_COD;OBSERVATEUR_COD;OBSERVATION_DATE;UNITE_OBSERVATION_COD +2011_888;GA;OBS1;05/01/2010;UO007 +2011_889;MA;OBS2;25/02/2010;UO087
participants (1)
-
bleny@users.labs.libre-entreprise.org