Wao-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- 2352 discussions
07 Mar '11
Author: bleny
Date: 2011-03-07 17:14:45 +0000 (Mon, 07 Mar 2011)
New Revision: 1053
Log:
add import or obsdeb sampling plan + test ; import UI ; sampling plan in UI
Added:
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/SampleRowDataSource.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java
trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java
trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java
trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.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_en_GB.properties
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/AbstractServiceTest.java
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/ServiceReferentialImplTest.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-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ContactDataSource.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java
trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties
trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties
trunk/wao-ui/src/main/webapp/Administration.tml
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -25,10 +25,15 @@
package fr.ifremer.wao;
import fr.ifremer.wao.entity.TerrestrialDivision;
+import fr.ifremer.wao.entity.TerrestrialDivisionDAO;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.mail.EmailException;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.persistence.TopiaDAO;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.util.beans.Binder;
+import org.nuiton.util.beans.BinderFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,6 +41,8 @@
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
@@ -228,4 +235,31 @@
}
return projection;
}
+
+ public static <E extends TopiaEntity> void createOrUpdate(Class<E> clazz, Iterator<E> entitiesIterator,
+ TopiaDAO<E> dao, String... idProperties)
+ throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, TopiaException {
+ while (entitiesIterator.hasNext()) {
+ E entity = entitiesIterator.next();
+ createOrUpdate(clazz, entity, dao, idProperties);
+ }
+ }
+
+ public static <E extends TopiaEntity> void createOrUpdate(Class<E> clazz, E entity,
+ TopiaDAO<E> dao, String... idProperties)
+ throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, TopiaException {
+ Binder<E, E> binder = BinderFactory.newBinder(clazz);
+ Map<String, Object> properties = new HashMap<String, Object>();
+ for (String idProperty : idProperties) {
+ properties.put(idProperty, PropertyUtils.getProperty(entity, idProperty));
+ }
+ E existingEntity = dao.findByProperties(properties);
+ if (existingEntity == null) {
+ dao.create(entity);
+ } else {
+ binder.copyExcluding(entity, existingEntity,
+ TopiaEntity.TOPIA_ID, TopiaEntity.TOPIA_CREATE_DATE, TopiaEntity.TOPIA_VERSION);
+ dao.update(existingEntity);
+ }
+ }
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -119,4 +119,9 @@
public boolean isObsVente() {
return isProgram(ObsProgram.OBSVENTE);
}
+
+ @Override
+ public boolean isObsDeb() {
+ return isProgram(ObsProgram.OBSDEB);
+ }
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -41,6 +41,7 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
@@ -214,7 +215,12 @@
*/
@Override
public List<Integer> removeNoLongerElligibleBoats(List<Boat> boats) {
- Iterator<ElligibleBoat> it = getElligibleBoat().iterator();
+ List<ElligibleBoat> eligibleBoats = getElligibleBoat();
+ if (eligibleBoats == null) {
+ eligibleBoats = Collections.emptyList();
+ }
+
+ Iterator<ElligibleBoat> it = eligibleBoats.iterator();
List<Integer> updatedImmatriculations = new ArrayList<Integer>();
while (it.hasNext()) {
ElligibleBoat elligible = it.next();
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -614,7 +614,7 @@
try {
Iterator<TerrestrialDivision> terrestrialDivisionIterator = terrestrialDivisionImport.startImport();
- createOrUpdate(TerrestrialDivision.class, terrestrialDivisionIterator, dao, TerrestrialDivision.PROPERTY_CODE);
+ WaoUtils.createOrUpdate(TerrestrialDivision.class, terrestrialDivisionIterator, dao, TerrestrialDivision.PROPERTY_CODE);
} catch (Exception e) {
transaction.rollbackTransaction();
throw e;
@@ -623,26 +623,4 @@
}
}
-
- protected <E extends TopiaEntity> void createOrUpdate(Class<E> clazz, Iterator<E> entitiesIterator,
- TopiaDAO<E> dao, String... idProperties)
- throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, TopiaException {
- Binder<E, E> binder = BinderFactory.newBinder(clazz);
- while (entitiesIterator.hasNext()) {
- E entity = entitiesIterator.next();
- Map<String, Object> properties = new HashMap<String, Object>();
- for (String idProperty : idProperties) {
- properties.put(idProperty, PropertyUtils.getProperty(entity, idProperty));
- }
- E existingEntity = dao.findByProperties(properties);
- if (existingEntity == null) {
- dao.create(entity);
- } else {
- binder.copyExcluding(entity, existingEntity,
- TopiaEntity.TOPIA_ID, TopiaEntity.TOPIA_CREATE_DATE, TopiaEntity.TOPIA_VERSION);
- dao.update(existingEntity);
- }
- }
-
- }
}
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-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -64,18 +64,22 @@
import fr.ifremer.wao.entity.SampleRowDAO;
import fr.ifremer.wao.entity.SampleRowImpl;
import fr.ifremer.wao.entity.SampleRowLog;
-import fr.ifremer.wao.entity.SampleRowLogDAO;
import fr.ifremer.wao.entity.SampleRowLogImpl;
import fr.ifremer.wao.entity.TargetSpeciesDCF;
+import fr.ifremer.wao.entity.TerrestrialDivision;
+import fr.ifremer.wao.entity.TerrestrialDivisionDAO;
import fr.ifremer.wao.entity.TerrestrialLocation;
import fr.ifremer.wao.entity.WaoUser;
+import fr.ifremer.wao.io.ImportRefusedException;
import fr.ifremer.wao.io.ImportResults;
import fr.ifremer.wao.io.ImportResultsImpl;
import fr.ifremer.wao.io.csv.ImportHelper;
import fr.ifremer.wao.io.csv.SamplingExport;
import fr.ifremer.wao.io.csv.WaoCsvHeader.FISHING_ZONE;
import fr.ifremer.wao.io.csv.WaoCsvHeader.SAMPLING;
-import org.apache.commons.lang.ObjectUtils;
+import fr.ifremer.wao.io.csv2.Import;
+import fr.ifremer.wao.io.csv2.models.SamplingPlanImportModel;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.mail.EmailException;
import org.nuiton.topia.TopiaContext;
@@ -85,6 +89,8 @@
import org.nuiton.util.DateUtil;
import org.nuiton.util.PeriodDates;
import org.nuiton.util.StringUtil;
+import org.nuiton.util.beans.Binder;
+import org.nuiton.util.beans.BinderFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -96,17 +102,15 @@
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
-import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
/**
* ServiceSamplingImpl
@@ -229,17 +233,21 @@
throws Exception {
// prepare some stuffs for persistence
- for (SampleMonth sampleMonth : row.getSampleMonth()) {
- if (sampleMonth.getTopiaId() == null) {
- context.prepareTopiaId(SampleMonth.class, sampleMonth);
+ if (row.getSampleMonth() != null) {
+ for (SampleMonth sampleMonth : row.getSampleMonth()) {
+ if (sampleMonth.getTopiaId() == null) {
+ context.prepareTopiaId(SampleMonth.class, sampleMonth);
+ }
}
}
- ProfessionDAO professionDAO = WaoDAOHelper.getProfessionDAO(transaction);
- if (row.getProfession().getTopiaId() == null) {
- context.prepareTopiaId(Profession.class, row.getProfession());
+ if (row.getProfession() != null) {
+ ProfessionDAO professionDAO = WaoDAOHelper.getProfessionDAO(transaction);
+ if (row.getProfession().getTopiaId() == null) {
+ context.prepareTopiaId(Profession.class, row.getProfession());
+ }
+ professionDAO.update(row.getProfession());
}
- professionDAO.update(row.getProfession());
if (row.getDCF5Code() != null) {
row.setDCF5Code(insertOrSelect(transaction, row.getDCF5Code()));
@@ -248,17 +256,33 @@
updateElligibleBoats(transaction, row, boats);
SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction);
- boolean rowIsNew = row.getTopiaId() == null;
+
+ SampleRow oldRow = null;
+ if (row.getCode() == null) {
+ String code = executeGetNewSampleRowCode(transaction, context.getCurrentDate());
+ row.setCode(code);
+ } else {
+ oldRow = getSampleRowByCode(null, row.getCode());
+ }
+
+ boolean rowIsNew = oldRow == null;
if (rowIsNew) {
+ if (row.getTopiaId() == null) {
+ context.prepareTopiaId(SampleRow.class, row);
+ }
dao.create(row);
} else {
- SampleRow oldRow = getSampleRow(row.getTopiaId());
+ rowLog.setLogText(oldRow, row);
+
+ Binder<SampleRow, SampleRow> sampleRowBinder = BinderFactory.newBinder(SampleRow.class);
+ sampleRowBinder.copyExcluding(row, oldRow, SampleRow.TOPIA_ID, SampleRow.TOPIA_VERSION, SampleRow.TOPIA_CREATE_DATE,
+ SampleRow.PROPERTY_SAMPLE_ROW_LOG);
+
if (rowLog.getTopiaId() == null) {
context.prepareTopiaId(SampleRowLog.class, rowLog);
}
- rowLog.setLogText(oldRow, row);
row.addSampleRowLog(rowLog);
- dao.update(row);
+ dao.update(oldRow);
}
transaction.commitTransaction();
@@ -612,10 +636,40 @@
List<SampleRow> rows = dao.findAllByQuery(query);
+ if (ObsProgram.OBSDEB.equals(filter.getObsProgram())) {
+ // force load
+ for (SampleRow row : rows) {
+ row.getObservationUnit().getPort();
+ row.sizeElligibleBoat();
+ }
+ }
+
return rows;
}
@Override
+ protected int executeCountSampleRows(TopiaContext transaction, SamplingFilter filter) throws Exception {
+
+ SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction);
+
+ WaoQueryBuilder builder = context.newQueryBuilder();
+
+ WaoQueryHelper.SampleRowProperty sampleRowProperty =
+ builder.initializeForSampleRow(false);
+
+ WaoQueryHelper.DCF5CodeProperty dcf5CodeProperty =
+ WaoQueryHelper.newDCF5CodeProperty();
+
+ TopiaQuery query = builder.applySamplingFilter(filter, false).
+ addLeftJoin(sampleRowProperty.dCF5Code(),
+ dcf5CodeProperty.$alias(), false);
+
+ int count = dao.countByQuery(query);
+
+ return count;
+ }
+
+ @Override
public SampleRow executeGetSampleRow(TopiaContext transaction,
List<Object> errorArgs, String sampleRowId) throws TopiaException {
@@ -625,13 +679,16 @@
SampleRow result = dao.findByTopiaId(sampleRowId);
- result.sizeSampleMonth();
- result.sizeElligibleBoat();
- result.sizeSampleRowLog();
+ if (result != null) {
+ // force load
+ result.sizeSampleMonth();
+ result.sizeElligibleBoat();
+ result.sizeSampleRowLog();
- if (result.getObsProgram() == ObsProgram.OBSVENTE) {
- // load specific field
- result.getTerrestrialLocation();
+ if (result.getObsProgram() == ObsProgram.OBSVENTE) {
+ // load specific field
+ result.getTerrestrialLocation();
+ }
}
return result;
@@ -649,17 +706,26 @@
TopiaQuery query = dao.createQuery().
addEquals(SampleRow.PROPERTY_CODE, sampleRowCode);
- if (!user.isAdmin() && !user.isGuest()) {
+ boolean filterByUser = user != null;
+ if (filterByUser && user.isCoordinatorOrObserver()) {
query.addEquals(SampleRow.PROPERTY_COMPANY, user.getCompany());
}
query.addLoad(SampleRow.PROPERTY_SAMPLE_ROW_LOG);
SampleRow result = dao.findByQuery(query);
- if (result == null) {
- throw new WaoBusinessException(Type.NOT_EXISTS,
- ServiceSampling.class, "La ligne du plan avec " +
- "pour code " + sampleRowCode + " est introuvable !");
+// if (result == null) {
+// throw new WaoBusinessException(Type.NOT_EXISTS,
+// ServiceSampling.class, "La ligne du plan avec " +
+// "pour code " + sampleRowCode + " est introuvable !");
+// }
+
+ if (result != null) {
+ result.sizeElligibleBoat();
+ result.sizeSampleMonth();
+ result.sizeFishingZone();
+ result.sizeDCF5Code();
+ result.sizeSampleRowLog();
}
return result;
@@ -960,104 +1026,127 @@
@Override
public ImportResults executeImportSamplingPlanCsv(TopiaContext transaction, List<Object> errorArgs,
- InputStream input, ObsProgram obsProgram) throws WaoBusinessException, IOException,
- TopiaException, ParseException {
+ InputStream input, ConnectedUser connectedUser) throws WaoBusinessException, IOException,
+ TopiaException, ParseException, ImportRefusedException {
+ ObsProgram obsProgram = connectedUser.getProfile().getObsProgram();
+
ImportResults result = new ImportResultsImpl();
- int currRow = 0;
- SampleRow row = null;
+ if (ObsProgram.OBSDEB.equals(obsProgram)) {
+ TerrestrialDivisionDAO terrestrialDivisionDAO = WaoDAOHelper.getTerrestrialDivisionDAO(transaction);
+ List<TerrestrialDivision> terrestrialDivisions = terrestrialDivisionDAO.findAll();
- errorArgs.add(currRow);
- errorArgs.add(null);
+ if (terrestrialDivisions.isEmpty()) {
+ throw new IllegalStateException("Le référentiel de stratification n'a pas été importé");
+ }
- CsvReader reader = new CsvReader(input, context.getCsvCharset());
- reader.readHeaders();
+ SamplingPlanImportModel samplingPlanImportModel = new SamplingPlanImportModel(terrestrialDivisions);
- ImportHelper.checkKeyHeader(reader, SAMPLING.PLAN_CODE);
+ try {
+ // SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction);
+ Import<SampleRow> samplingPlanImport = new Import<SampleRow>(samplingPlanImportModel, input);
+ Iterator<SampleRow> it = samplingPlanImport.startImport();
+ while (it.hasNext()) {
+ SampleRow sampleRow = it.next();
+ sampleRow.clearSampleMonth();
- SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction);
+ SampleRowLog sampleRowLog = executeGetNewSampleRowLog(sampleRow, connectedUser);
- //int nbImported = 0;
- //int nbRefused = 0;
+ try {
+ // WaoUtils.createOrUpdate(SampleRow.class, sampleRow, dao, SampleRow.PROPERTY_OBS_PROGRAM_ORDINAL, SampleRow.PROPERTY_CODE);
+ executeCreateUpdateSampleRow(transaction, sampleRow, new ArrayList<Boat>(), sampleRowLog);
+ } catch (Exception e) {
+ errorArgs.add(-1);
+ errorArgs.add(sampleRow.getCode());
+ //errorArgs.add(e.getMessage());
+ throw new ImportRefusedException(e.getMessage(), -1, "field", e);
+ }
+ }
+ transaction.commitTransaction();
+ } finally {
+ IOUtils.closeQuietly(input);
+ }
- while(reader.readRecord()) {
+ } else {
- currRow++;
+ int currRow = 0;
+ SampleRow row = null;
- if (log.isTraceEnabled()) {
- log.trace(" " + Arrays.asList(reader.getValues()));
- }
+ errorArgs.add(currRow);
+ errorArgs.add(null);
- String code = ImportHelper.readSampleRowCode(reader); //reader.get(SAMPLING.PLAN_CODE.name()).trim();
+ CsvReader reader = new CsvReader(input, context.getCsvCharset());
+ reader.readHeaders();
- if (StringUtils.isEmpty(code)) {
- continue;
- }
+ ImportHelper.checkKeyHeader(reader, SAMPLING.PLAN_CODE);
- errorArgs.set(0, currRow);
- errorArgs.set(1, code);
+ SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction);
- String districts = ImportHelper.read(reader, FISHING_ZONE.PECHE_DIVISION);
+ //int nbImported = 0;
+ //int nbRefused = 0;
- row = dao.findByCode(code);
- // Refuse existing SampleRow
- if (row != null) {
- result.addError(currRow, "[CODE = " + code + "] refusé : Code déjà existant");
- result.incNbRefused();
- // Refuse Fishing zones empty
- } else if (StringUtils.isEmpty(districts)) {
- result.addError(currRow, "[CODE = " + code + "] refusé : Zone de pêche non renseigné");
- result.incNbRefused(); //nbRefused++;
- } else {
- row = dao.create(SampleRow.PROPERTY_CODE, code);
- row.setObsProgram(obsProgram);
+ while(reader.readRecord()) {
- String companyName = ImportHelper.read(reader, SAMPLING.SOCIETE_NOM);
+ currRow++;
- // Create link with company if set in file
- if (!StringUtils.isEmpty(companyName)) {
- CompanyDAO companyDAO = WaoDAOHelper.getCompanyDAO(transaction);
- Company company = companyDAO.findByName(companyName);
- if (company == null) {
- throw new WaoBusinessException(Type.IMPORT_ERROR, this.getClass(),
- "Erreur à la ligne " + currRow + " [CODE = " + code + "] : " +
- "La société portant le nom '" + companyName + "' n'existe pas dans l'application");
- }
- row.setCompany(company);
+ if (log.isTraceEnabled()) {
+ log.trace(" " + Arrays.asList(reader.getValues()));
}
- // Import profession. Creation if not exist
- Profession profession = importProfession(transaction, reader);
- row.setProfession(profession);
+ String code = ImportHelper.readSampleRowCode(reader); //reader.get(SAMPLING.PLAN_CODE.name()).trim();
- // Import zones and set them to the row
- // throw WaoException if FishingZone doesn't exist
- importFishingZones(transaction, districts, currRow, row);
+ if (StringUtils.isEmpty(code)) {
+ continue;
+ }
- updateRow(transaction, row, reader);
- result.incNbImported(); //nbImported++;
+ errorArgs.set(0, currRow);
+ errorArgs.set(1, code);
+
+ String districts = ImportHelper.read(reader, FISHING_ZONE.PECHE_DIVISION);
+
+ row = dao.findByCode(code);
+ // Refuse existing SampleRow
+ if (row != null) {
+ result.addError(currRow, "[CODE = " + code + "] refusé : Code déjà existant");
+ result.incNbRefused();
+ // Refuse Fishing zones empty
+ } else if (StringUtils.isEmpty(districts)) {
+ result.addError(currRow, "[CODE = " + code + "] refusé : Zone de pêche non renseigné");
+ result.incNbRefused(); //nbRefused++;
+ } else {
+ row = dao.create(SampleRow.PROPERTY_CODE, code);
+ row.setObsProgram(obsProgram);
+
+ String companyName = ImportHelper.read(reader, SAMPLING.SOCIETE_NOM);
+
+ // Create link with company if set in file
+ if (!StringUtils.isEmpty(companyName)) {
+ CompanyDAO companyDAO = WaoDAOHelper.getCompanyDAO(transaction);
+ Company company = companyDAO.findByName(companyName);
+ if (company == null) {
+ throw new WaoBusinessException(Type.IMPORT_ERROR, this.getClass(),
+ "Erreur à la ligne " + currRow + " [CODE = " + code + "] : " +
+ "La société portant le nom '" + companyName + "' n'existe pas dans l'application");
+ }
+ row.setCompany(company);
+ }
+
+ // Import profession. Creation if not exist
+ Profession profession = importProfession(transaction, reader);
+ row.setProfession(profession);
+
+ // Import zones and set them to the row
+ // throw WaoException if FishingZone doesn't exist
+ importFishingZones(transaction, districts, currRow, row);
+
+ updateRow(transaction, row, reader);
+ result.incNbImported(); //nbImported++;
+ }
+ // Commit row by row
+ transaction.commitTransaction();
}
- // Commit row by row
- transaction.commitTransaction();
}
- //transaction.closeContext();
-
-// } catch (NumberFormatException eee) {
-// context.serviceException(transaction,
-// "Erreur à la ligne " + currRow + " [CODE = " + row.getCode() + "] : " +
-// "Le format de la durée moyenne des marées est incorrect, il doit être de la forme : 1.9 ", eee);
-// } catch (ParseException eee) {
-// context.serviceException(transaction,
-// "Erreur à la ligne " + currRow + " [CODE = " + row.getCode() + "] : " +
-// "Le format des dates est incorrect, il doit être de la forme : MM/AAAA", eee);
-// } catch (Exception eee) {
-// context.serviceException(transaction,
-// "Erreur à la ligne " + currRow + " [CODE = " + row.getCode() + "]",
-// eee);
-// } finally {
-// context.closeTransaction(transaction);
-// }
return result;
}
Modified: trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties
===================================================================
--- trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-03-07 17:14:45 UTC (rev 1053)
@@ -181,6 +181,7 @@
wao.error.serviceReferential.importTerrestrialDivisions=
wao.error.serviceReferential.importTerrestrialLocations=
wao.error.serviceReferential.updateAllContactStatesMotifs=
+wao.error.serviceSampling.countSampleRows=
wao.error.serviceSampling.createSampleRowLog=
wao.error.serviceSampling.createUpdateSampleRow=
wao.error.serviceSampling.deleteSampleRow=
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-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-03-07 17:14:45 UTC (rev 1053)
@@ -181,6 +181,7 @@
wao.error.serviceReferential.importTerrestrialDivisions=
wao.error.serviceReferential.importTerrestrialLocations=
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
Modified: trunk/wao-business/src/main/xmi/wao.zargo
===================================================================
(Binary files differ)
Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java
===================================================================
--- trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -21,6 +21,8 @@
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;
@@ -35,8 +37,10 @@
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;
@@ -552,7 +556,7 @@
input = getClass().getResourceAsStream("/import/echantillonnage.csv");
ServiceSampling serviceSampling = manager.getServiceSampling();
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction);
SampleRow row = rowDAO.findByCode("2010_0001");
@@ -621,4 +625,16 @@
contact6.setValidationProgram(Boolean.FALSE);
serviceContact.saveContact(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;
+ }
}
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-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -24,10 +24,12 @@
package fr.ifremer.wao.entity;
+import fr.ifremer.wao.AbstractServiceTest;
import fr.ifremer.wao.TestManager;
import fr.ifremer.wao.WaoDAOHelper;
import fr.ifremer.wao.bean.ContactState;
import fr.ifremer.wao.bean.ObsProgram;
+import fr.ifremer.wao.bean.UserRole;
import fr.ifremer.wao.service.ServiceBoat;
import fr.ifremer.wao.service.ServiceContact;
import fr.ifremer.wao.service.ServiceSampling;
@@ -54,7 +56,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
-public class BoatImplTest {
+public class BoatImplTest extends AbstractServiceTest {
private static TestManager manager;
@@ -118,7 +120,7 @@
ServiceSampling serviceSampling = manager.getServiceSampling();
input = getClass().getResourceAsStream("/import/echantillonnage.csv");
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction);
SampleRow row = rowDAO.findByCode("2010_0001");
@@ -212,7 +214,7 @@
ServiceSampling serviceSampling = manager.getServiceSampling();
input = getClass().getResourceAsStream("/import/echantillonnage.csv");
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction);
SampleRow row = rowDAO.findByCode("2010_0001");
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-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -24,6 +24,7 @@
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;
@@ -77,7 +78,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
-public class ServiceBoatImplTest {
+public class ServiceBoatImplTest extends AbstractServiceTest {
private static TestManager manager;
@@ -237,7 +238,7 @@
ServiceSampling serviceSampling = manager.getServiceSampling();
input = getClass().getResourceAsStream("/import/echantillonnage.csv");
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
// Get two SampleRows : 2009_3 & 2010_4
SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction);
Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialImplTest.java
===================================================================
--- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialImplTest.java 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialImplTest.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -29,6 +29,7 @@
import fr.ifremer.wao.bean.SamplingFilter;
import fr.ifremer.wao.bean.SamplingFilterImpl;
import fr.ifremer.wao.entity.FishingZone;
+import org.apache.commons.io.IOUtils;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@@ -159,10 +160,14 @@
}
@Test
- @Ignore("raise an exception due to business consistency, validation works")
public void testImportTerrestrialDivision() {
- InputStream input = getClass().getResourceAsStream("/import/terrestrialDivisions.csv");
- service.importTerrestrialDivisions(input);
+ InputStream input = null;
+ try {
+ input = getClass().getResourceAsStream("/import/purifiedTerrestrialDivisions.csv");
+ service.importTerrestrialDivisions(input);
+ } finally {
+ IOUtils.closeQuietly(input);
+ }
}
}
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-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -33,6 +33,7 @@
import fr.ifremer.wao.bean.SamplingFilter;
import fr.ifremer.wao.bean.SamplingFilterImpl;
import fr.ifremer.wao.bean.SamplingStrategy;
+import fr.ifremer.wao.bean.UserRole;
import fr.ifremer.wao.entity.Boat;
import fr.ifremer.wao.entity.Company;
import fr.ifremer.wao.entity.CompanyDAO;
@@ -58,6 +59,7 @@
import fr.ifremer.wao.entity.TargetSpeciesDCFImpl;
import fr.ifremer.wao.entity.WaoUser;
import fr.ifremer.wao.io.ImportResults;
+import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Test;
import org.nuiton.topia.TopiaContext;
@@ -414,7 +416,7 @@
transaction.closeContext();
InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv");
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
/** EXEC METHOD **/
SamplingFilter filter = new SamplingFilterImpl();
@@ -433,22 +435,6 @@
assertEquals(1, results.size());
}
- /**
- * Test of getHistoric method, of class ServiceSamplingImpl.
- */
- //@Test
- public void testGetHistoric() throws Exception {
- System.out.println("getHistoric");
- }
-
- /**
- * Test of getSampleRow method, of class ServiceSamplingImpl.
- */
- //@Test
- public void testGetSampleRow() throws Exception {
- System.out.println("getSampleRow");
- }
-
@Test
public void testGetNewProfession() throws Exception {
log.info("getNewProfession");
@@ -497,7 +483,7 @@
InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv");
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction);
SampleRow row = rowDAO.findByCode("2010_0001");
@@ -572,7 +558,7 @@
/** EXEC METHOD **/
InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv");
- ImportResults result = serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ ImportResults result = serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
// total imported
assertEquals(12, result.getNbRowsImported());
@@ -639,7 +625,7 @@
transaction.closeContext();
InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv");
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
/** EXEC METHOD **/
List<String> programs = serviceSampling.getPrograms(null);
@@ -666,7 +652,7 @@
ServiceSampling serviceSampling = manager.getServiceSampling();
InputStream input = getClass().getResourceAsStream("/import/echantillonnage.csv");
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
transaction.closeContext();
@@ -687,4 +673,50 @@
// Assert.assertEquals("2010_04", code);
}
+ /**
+ * Check that it's possible to import a sampling plan for the obsDeb Program
+ *
+ * @throws WaoBusinessException should not occur
+ */
+ @Test
+ public void importObsdebSamplingPlan() throws WaoBusinessException {
+ ServiceReferential serviceReferential = manager.getServiceReferential();
+ InputStream input = null;
+ try {
+ input = getClass().getResourceAsStream("/import/purifiedTerrestrialDivisions.csv");
+ serviceReferential.importTerrestrialDivisions(input);
+ } finally {
+ IOUtils.closeQuietly(input);
+ }
+
+ try {
+ input = getClass().getResourceAsStream("/import/samplingPlan-obsdeb.csv");
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSDEB));
+ } finally {
+ IOUtils.closeQuietly(input);
+ }
+
+ SamplingFilter filter = new SamplingFilterImpl();
+ filter.setObsProgram(ObsProgram.OBSDEB);
+ List<SampleRow> samplingPlan = serviceSampling.getSampleRowsByFilter(filter);
+ for (SampleRow sampleRow : samplingPlan) {
+ Assert.assertNotNull("all sample rows must have a code", sampleRow.getCode());
+ Assert.assertNotNull("all sample rows must have a day", sampleRow.getDay());
+ Assert.assertNotNull("all sample rows must have a location", sampleRow.getObservationUnit());
+ Assert.assertNotNull("all sample rows must be attached to a port", sampleRow.getObservationUnit().getPort());
+ }
+ Assert.assertEquals("there is two line to import", 2, samplingPlan.size());
+
+ // Now, let's try to re-import the same file and check that
+ // lines has been updated and no new line were added
+ try {
+ input = getClass().getResourceAsStream("/import/samplingPlan-obsdeb.csv");
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSDEB));
+ } finally {
+ IOUtils.closeQuietly(input);
+ }
+ samplingPlan = serviceSampling.getSampleRowsByFilter(filter);
+ Assert.assertEquals("there is two line to import", 2, samplingPlan.size());
+ }
+
}
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-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSynthesisImplTest.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -33,6 +33,7 @@
import fr.ifremer.wao.bean.ObsProgram;
import fr.ifremer.wao.bean.SamplingFilter;
import fr.ifremer.wao.bean.SamplingFilterImpl;
+import fr.ifremer.wao.bean.UserRole;
import fr.ifremer.wao.entity.Boat;
import fr.ifremer.wao.entity.Company;
import fr.ifremer.wao.entity.CompanyDAO;
@@ -143,7 +144,7 @@
input = getClass().getResourceAsStream("/import/echantillonnage.csv");
ServiceSampling serviceSampling = manager.getServiceSampling();
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction);
SampleRow row = rowDAO.findByCode("2010_0001");
@@ -233,7 +234,7 @@
input = getClass().getResourceAsStream("/import/echantillonnage.csv");
ServiceSampling serviceSampling = manager.getServiceSampling();
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction);
SampleRow row = rowDAO.findByCode("2010_0001");
@@ -515,7 +516,7 @@
input = getClass().getResourceAsStream("/import/echantillonnage.csv");
ServiceSampling serviceSampling = manager.getServiceSampling();
- serviceSampling.importSamplingPlanCsv(input, ObsProgram.OBSMER);
+ serviceSampling.importSamplingPlanCsv(input, getConnectedUser(null, UserRole.ADMIN, ObsProgram.OBSMER));
SampleRowDAO rowDAO = WaoDAOHelper.getSampleRowDAO(transaction);
SampleRow row = rowDAO.findByCode("2010_0001");
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -25,10 +25,12 @@
package fr.ifremer.wao.ui.components;
import fr.ifremer.wao.bean.ConnectedUser;
+import fr.ifremer.wao.bean.ObsProgram;
import fr.ifremer.wao.ui.pages.Administration;
import fr.ifremer.wao.ui.pages.Boats;
import fr.ifremer.wao.ui.pages.Contacts;
import fr.ifremer.wao.ui.pages.Index;
+import fr.ifremer.wao.ui.pages.ObsDebSamplingPlan;
import fr.ifremer.wao.ui.pages.SamplingPlan;
import fr.ifremer.wao.ui.pages.Synthesis;
import fr.ifremer.wao.ui.services.ServiceAuthentication;
@@ -156,18 +158,21 @@
if (menuItems == null) {
Messages messages = resources.getMessages();
- Map<String, Class> pagesInMenu = new LinkedHashMap<String, Class>();
+ Map<Class, String> pagesInMenu = new LinkedHashMap<Class, String>();
- pagesInMenu.put(messages.get(n_("wao.ui.page.SamplingPlan.title")), SamplingPlan.class);
- pagesInMenu.put(messages.get(n_("wao.ui.page.Boats.title")), Boats.class);
- pagesInMenu.put(messages.get(n_("wao.ui.page.Contacts.title")), Contacts.class);
- pagesInMenu.put(messages.get(n_("wao.ui.page.Synthesis.title")), Synthesis.class);
- pagesInMenu.put(messages.get(n_("wao.ui.page.Administration.title")), Administration.class);
+ // Adding all pages that may be in the main menu
+ pagesInMenu.put(SamplingPlan.class, messages.get(n_("wao.ui.page.SamplingPlan.title")));
+ pagesInMenu.put(ObsDebSamplingPlan.class, messages.get(n_("wao.ui.page.SamplingPlan.title")));
+ pagesInMenu.put(Boats.class, messages.get(n_("wao.ui.page.Boats.title")));
+ pagesInMenu.put(Contacts.class, messages.get(n_("wao.ui.page.Contacts.title")));
+ pagesInMenu.put(Synthesis.class, messages.get(n_("wao.ui.page.Synthesis.title")));
+ pagesInMenu.put(Administration.class, messages.get(n_("wao.ui.page.Administration.title")));
+ // now creating the menu by adding only authorized pages
menuItems = new LinkedHashMap<String, String>();
- for (Map.Entry<String, Class> menuEntry : pagesInMenu.entrySet()) {
- String linkName = menuEntry.getKey();
- Class page = menuEntry.getValue();
+ for (Map.Entry<Class, String> menuEntry : pagesInMenu.entrySet()) {
+ Class page = menuEntry.getKey();
+ String linkName = menuEntry.getValue();
if (serviceAuthentication.isAllowed(page)) {
Link link = pageRender.createPageRenderLinkWithContext(page);
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ContactDataSource.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ContactDataSource.java 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/ContactDataSource.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -29,8 +29,6 @@
import fr.ifremer.wao.entity.Contact;
import fr.ifremer.wao.service.ServiceContact;
import org.apache.tapestry5.grid.SortConstraint;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.util.Map;
@@ -43,8 +41,6 @@
*/
public class ContactDataSource extends AbstractMappedGridDataSource<String, Contact> {
- private static Logger log = LoggerFactory.getLogger(ContactDataSource.class);
-
private ContactFilter filter;
private ServiceContact serviceContact;
Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/SampleRowDataSource.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/SampleRowDataSource.java (rev 0)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/SampleRowDataSource.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -0,0 +1,43 @@
+package fr.ifremer.wao.ui.data;
+
+import fr.ifremer.wao.WaoException;
+import fr.ifremer.wao.WaoUtils;
+import fr.ifremer.wao.bean.SamplingFilter;
+import fr.ifremer.wao.entity.SampleRow;
+import fr.ifremer.wao.service.ServiceSampling;
+import org.apache.tapestry5.grid.SortConstraint;
+
+import java.util.List;
+import java.util.Map;
+
+public class SampleRowDataSource extends AbstractMappedGridDataSource<String, SampleRow> {
+
+ protected SamplingFilter filter;
+
+ protected ServiceSampling serviceSampling;
+
+ public SampleRowDataSource(SamplingFilter filter, ServiceSampling serviceSampling) {
+ this.filter = filter;
+ this.serviceSampling = serviceSampling;
+ }
+
+ @Override
+ protected Map<String, SampleRow> execute(int startIndex, int endIndex, SortConstraint orderBy) throws WaoException {
+ filter.setStartIndex(startIndex);
+ filter.setEndIndex(endIndex);
+ List<SampleRow> sampleRows = serviceSampling.getSampleRowsByFilter(filter);
+ Map<String, SampleRow> result = WaoUtils.projectPropertyUnique(sampleRows, SampleRow.TOPIA_ID);
+ return result;
+ }
+
+ @Override
+ protected int count() throws WaoException {
+ int count = serviceSampling.countSampleRows(filter);
+ return count;
+ }
+
+ @Override
+ public Class<?> getRowType() {
+ return SampleRow.class;
+ }
+}
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -209,8 +209,7 @@
@Override
public ImportResults execute(InputStream input)
throws WaoException, WaoBusinessException {
- ImportResults results = serviceSampling.importSamplingPlanCsv(input,
- currentUser.getProfile().getObsProgram());
+ ImportResults results = serviceSampling.importSamplingPlanCsv(input, currentUser);
return results;
}
};
@@ -258,6 +257,18 @@
};
}
+ public ImportEngine getTerrestrialDivisionsImportEngine() {
+ return new ImportEngine() {
+
+ @Override
+ public ImportResults execute(InputStream input)
+ throws WaoException, WaoBusinessException {
+ serviceReferential.importTerrestrialDivisions(input);
+ return null;
+ }
+ };
+ }
+
public InputStream getActivityCalendarLogFile() {
return getActivityCalendarLogFile(WaoProperty.FILENAME_LOG_ACTIVITY_IMPORT);
}
Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java (rev 0)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -0,0 +1,63 @@
+package fr.ifremer.wao.ui.pages;
+
+
+import fr.ifremer.wao.bean.ObsProgram;
+import fr.ifremer.wao.bean.SamplingFilter;
+import fr.ifremer.wao.bean.SamplingFilterImpl;
+import fr.ifremer.wao.entity.SampleRow;
+import fr.ifremer.wao.service.ServiceSampling;
+import fr.ifremer.wao.ui.data.SampleRowDataSource;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.grid.GridDataSource;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.services.BeanModelSource;
+
+public class ObsDebSamplingPlan {
+
+ /********* Tapestry stuffs **********/
+
+ @Inject
+ private BeanModelSource beanModelSource;
+
+ @Inject
+ private ComponentResources resources;
+
+ @Inject
+ private ServiceSampling serviceSampling;
+
+
+ /********* FILTERS ********/
+
+ public SamplingFilter getSamplingFilter() {
+ SamplingFilter samplingFilter = new SamplingFilterImpl();
+ samplingFilter.setObsProgram(ObsProgram.OBSDEB);
+ return samplingFilter;
+ }
+
+ /********* GRID ********/
+
+ private GridDataSource sampleRows;
+
+ @Property
+ private SampleRow sampleRow;
+
+ public GridDataSource getSampleRows() {
+ if (sampleRows == null) {
+ sampleRows = new SampleRowDataSource(getSamplingFilter(), serviceSampling);
+ }
+ return sampleRows;
+ }
+
+ private BeanModel<SampleRow> obsdebSamplingPlanModel;
+
+ public BeanModel<SampleRow> getObsdebSamplingPlanModel() {
+ if (obsdebSamplingPlanModel == null) {
+ obsdebSamplingPlanModel = beanModelSource.createDisplayModel(SampleRow.class, resources.getMessages());
+ obsdebSamplingPlanModel.include(SampleRow.PROPERTY_CODE, SampleRow.PROPERTY_DAY, SampleRow.PROPERTY_COMMENT);
+ obsdebSamplingPlanModel.add(SampleRow.PROPERTY_OBSERVATION_UNIT);
+ }
+ return obsdebSamplingPlanModel;
+ }
+}
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2011-03-07 17:14:45 UTC (rev 1053)
@@ -79,7 +79,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
- at RequiresAuthentication
+ at RequiresAuthentication(allowedPrograms = {ObsProgram.OBSMER, ObsProgram.OBSVENTE})
@Import(stylesheet = "context:css/sampling.css")
public class SamplingPlan extends AbstractFilteredPage {
Modified: trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties
===================================================================
--- trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-03-07 17:14:45 UTC (rev 1053)
@@ -166,6 +166,7 @@
wao.ui.import.fullDescription=Import %s (%s format with UTF-8 characters set)
wao.ui.import.longTitle=CSV Import/Export (UTF-8)
wao.ui.import.samplingPlanLabel=of the sampling plan
+wao.ui.import.terrestrialDivisionsLabel=of the terrestrial divisions (ObsDeb)
wao.ui.import.terrestrialLocationsLabel=of the terrestrial locations
wao.ui.import.title=Import %s
wao.ui.indicator.andMore=%s and more
Modified: trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties
===================================================================
--- trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-03-07 17:14:45 UTC (rev 1053)
@@ -166,6 +166,7 @@
wao.ui.import.fullDescription=Import %s (format %s avec encodage UTF-8)
wao.ui.import.longTitle=Import/Export CSV (UTF-8)
wao.ui.import.samplingPlanLabel=du plan d'\u00E9chantillonnage
+wao.ui.import.terrestrialDivisionsLabel=du r\u00E9f\u00E9rentiel de stratification spatiale (ObsDeb)
wao.ui.import.terrestrialLocationsLabel=des lieux terrestres
wao.ui.import.title=Import %s
wao.ui.indicator.andMore=%s et plus
Modified: trunk/wao-ui/src/main/webapp/Administration.tml
===================================================================
--- trunk/wao-ui/src/main/webapp/Administration.tml 2011-03-03 13:44:16 UTC (rev 1052)
+++ trunk/wao-ui/src/main/webapp/Administration.tml 2011-03-07 17:14:45 UTC (rev 1053)
@@ -178,6 +178,10 @@
</t:unless>
<t:importFieldSet t:label="${message:wao.ui.import.terrestrialLocationsLabel}" t:engine="terrestrialLocationsImportEngine" />
+
+ <t:if test="currentUser.obsDeb">
+ <t:importFieldSet t:label="${message:wao.ui.import.terrestrialDivisionsLabel}" t:engine="terrestrialDivisionsImportEngine" />
+ </t:if>
</t:if>
<div class="mtop10" />
Added: trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml
===================================================================
--- trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml (rev 0)
+++ trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml 2011-03-07 17:14:45 UTC (rev 1053)
@@ -0,0 +1,8 @@
+<t:layout t:pageTitle="${message:wao.ui.page.SamplingPlan.title}" t:contentId="wao-obsdebsamplingplan"
+ xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
+
+ <div t:type="grid" t:source="sampleRows" t:row="sampleRow" t:model="obsdebSamplingPlanModel" t:rowsPerPage="20">
+
+ </div>
+
+</t:layout>
\ No newline at end of file
1
0
[Suiviobsmer-commits] r1052 - in trunk/wao-business/src/test/java/fr/ifremer/wao: entity service
by bleny@users.labs.libre-entreprise.org 03 Mar '11
by bleny@users.labs.libre-entreprise.org 03 Mar '11
03 Mar '11
Author: bleny
Date: 2011-03-03 13:44:16 +0000 (Thu, 03 Mar 2011)
New Revision: 1052
Log:
fix build
Modified:
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/ServiceSamplingImplTest.java
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-03-02 19:31:34 UTC (rev 1051)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/entity/BoatImplTest.java 2011-03-03 13:44:16 UTC (rev 1052)
@@ -126,6 +126,7 @@
row.getProfession();
row.sizeElligibleBoat();
row.sizeSampleMonth();
+ row.sizeSampleRowLog();
transaction.closeContext();
row.setCompany(company);
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-03-02 19:31:34 UTC (rev 1051)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceBoatImplTest.java 2011-03-03 13:44:16 UTC (rev 1052)
@@ -245,10 +245,12 @@
row1.getProfession();
row1.sizeElligibleBoat();
row1.sizeSampleMonth();
+ row1.sizeSampleRowLog();
SampleRow row2 = rowDAO.findByCode("2010_0004");
row2.getProfession();
row2.sizeElligibleBoat();
row2.sizeSampleMonth();
+ row2.sizeSampleRowLog();
transaction.commitTransaction();
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-03-02 19:31:34 UTC (rev 1051)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java 2011-03-03 13:44:16 UTC (rev 1052)
@@ -506,6 +506,7 @@
row.getCompany();
row.sizeSampleMonth();
row.sizeElligibleBoat();
+ row.sizeSampleRowLog();
transaction.closeContext();
input = getClass().getResourceAsStream("/import/navires.csv");
1
0
[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
by bleny@users.labs.libre-entreprise.org 02 Mar '11
by bleny@users.labs.libre-entreprise.org 02 Mar '11
02 Mar '11
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
1
0
02 Mar '11
Author: bleny
Date: 2011-03-02 13:11:44 +0000 (Wed, 02 Mar 2011)
New Revision: 1050
Log:
add import for obsdeb sampling plan
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java
trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java
trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java
trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ObsProgram.java
trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialLocationImpl.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Common.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParser.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java
trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties
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/io/csv2/ImportTest.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -810,4 +810,36 @@
"CONSTRAINT port_fkey FOREIGN KEY (port) " +
"REFERENCES TerrestrialLocation (topiaid));");
}
+
+ @Override
+ protected void addObsDebToSampleRows_3_0(List<String> queries) {
+ queries.add("ALTER TABLE SampleRow ADD day TIMESTAMP WITHOUT TIME ZONE;");
+ queries.add("ALTER TABLE SampleRow ADD groupName CHARACTER VARYING(255);");
+ queries.add("ALTER TABLE SampleRow ADD observationUnit CHARACTER VARYING(255);");
+ queries.add("ALTER TABLE SampleRow ADD CONSTRAINT observationUnit_fkey FOREIGN KEY (observationUnit) REFERENCES TerrestrialDivision(topiaId);");
+
+ }
+
+ @Override
+ protected void addAdminRolesToAdmin_3_0(TopiaContextImplementor tx, List<String> queries) throws TopiaException {
+ SQLQuery query = tx.getHibernate().
+ createSQLQuery("SELECT topiaId FROM WaoUser WHERE login='admin';");
+
+ Object result = query.uniqueResult();
+ String adminTopiaId = (String) result;
+
+ String topiaCreateDateValue = "DATE '2011-03-03'";
+
+ String sql = String.format("INSERT INTO UserProfile (topiaId, topiaVersion, topiaCreateDate, waoUser, obsProgramOrdinal, userRoleOrdinal, canWrite) " +
+ "VALUES ('%s', %s, %s, '%s', %s, %s, %s);",
+ "fr.ifremer.wao.entities.UserProfile#1299060188000#73994323",
+ 0,
+ topiaCreateDateValue,
+ adminTopiaId,
+ ObsProgram.OBSDEB.ordinal(),
+ UserRole.ADMIN.ordinal(),
+ true);
+
+ queries.add(sql);
+ }
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -133,6 +133,10 @@
protected abstract void addTerrestrialDivisions_3_0(List<String> queries);
+ protected abstract void addObsDebToSampleRows_3_0(List<String> queries);
+
+ protected abstract void addAdminRolesToAdmin_3_0(TopiaContextImplementor tx, List<String> queries) throws TopiaException;
+
protected static final Version[] VERSIONS = new Version[] {
VersionUtil.valueOf("1.0"),
VersionUtil.valueOf("1.1"),
@@ -472,8 +476,12 @@
List<String> queries = new LinkedList<String>();
+ addAdminRolesToAdmin_3_0(tx, queries);
+
addTerrestrialDivisions_3_0(queries);
+ addObsDebToSampleRows_3_0(queries);
+
String[] strings = queries.toArray(new String[queries.size()]);
executeSQL(tx, showSql, showProgression, strings);
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -24,16 +24,23 @@
package fr.ifremer.wao;
+import fr.ifremer.wao.entity.TerrestrialDivision;
+import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.mail.EmailException;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.lang.reflect.InvocationTargetException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Locale;
+import java.util.Map;
import static org.nuiton.i18n.I18n.l_;
@@ -161,4 +168,64 @@
public static boolean isEmail(String str) {
return str.matches("^[a-z0-9!#$%&'*+/=?^_`{|}~-]+((\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)?)+@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9\\-]*[a-z0-9])?$");
}
+
+ /** Cut a collection of beans by divide them depending of the value
+ * of a given property.
+ *
+ * @param clazz the class of the property
+ * @param elements all the elements to project
+ * @param propertyName the name of the property to get on each element
+ * to make the projection
+ * @param <T> the type of the
+ * @param <E> the type
+ * @return a map associate for each different values of the properties
+ * all the elements that has this value
+ */
+ public static <T,E> Map<T, List<E>> projectProperty(Class<T> clazz, List<E> elements, String propertyName) {
+ Map<T, List<E>> projection = new LinkedHashMap<T, List<E>>();
+ for (E element : elements) {
+ T key;
+ try {
+ key = (T) PropertyUtils.getProperty(element, propertyName);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(e);
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ List<E> value = projection.get(key);
+ if (value == null) {
+ value = new LinkedList<E>();
+ }
+ value.add(element);
+ projection.put(key, value);
+ }
+ return projection;
+ }
+
+ /**
+ * Produce a map of the same size of the list, values are the
+ * elements of the list and key is, for each element of the
+ * list, the value of a given property for this element.
+ *
+ * @see #projectProperty(Class, java.util.List, String)
+ */
+ public static <T,E> Map<T, E> projectPropertyUnique(List<E> elements, String propertyName) {
+ Map<T, E> projection = new LinkedHashMap<T, E>();
+ for (E element : elements) {
+ T key;
+ try {
+ key = (T) PropertyUtils.getProperty(element, propertyName);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(e);
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+ projection.put(key, element);
+ }
+ return projection;
+ }
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ObsProgram.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ObsProgram.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ObsProgram.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -27,7 +27,8 @@
public enum ObsProgram {
OBSMER(n_("ObsProgram.OBSMER")),
- OBSVENTE(n_("ObsProgram.OBSVENTE"));
+ OBSVENTE(n_("ObsProgram.OBSVENTE")),
+ OBSDEB(n_("ObsProgram.OBSDEB"));
protected String i18nKey;
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-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialLocationImpl.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -22,6 +22,7 @@
import fr.ifremer.wao.WaoUtils;
import fr.ifremer.wao.bean.LocationType;
+import org.apache.commons.lang.ObjectUtils;
import static org.nuiton.i18n.I18n.n_;
@@ -74,7 +75,7 @@
} else {
description.append(getName()).append(" (")
.append(getLocationType()).append(", ");
- if ( ! getPortName().equals(getName())) {
+ if (getPortName() != null && ! getPortName().equals(getName())) {
description.append(getPortName()).append(", ");
}
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Common.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Common.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Common.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -2,6 +2,11 @@
import org.apache.commons.beanutils.BeanUtils;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
public class Common {
public static class StringValueParser implements ValueParser<String> {
@@ -27,4 +32,20 @@
}
}
+ public static class DateValueParser implements ValueParser<Date> {
+
+ protected DateFormat dateFormat;
+
+ public DateValueParser(String dateFormatPattern) {
+ this.dateFormat = new SimpleDateFormat(dateFormatPattern);
+ }
+
+ @Override
+ public Date parse(String value) throws ParseException {
+ return dateFormat.parse(value);
+ }
+ }
+
+ public static final ValueParser<Date> DAY_PARSER = new DateValueParser("dd/MM/yyyy");
+
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -20,6 +20,8 @@
*/
package fr.ifremer.wao.io.csv2;
+import java.text.ParseException;
+
public interface ImportableColumn<E, T> {
String getHeaderName();
@@ -27,7 +29,7 @@
boolean isIgnored();
- T parseValue(String value);
+ T parseValue(String value) throws ParseException;
void setValue(E object, T value) throws Exception;
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -22,6 +22,8 @@
import org.apache.commons.beanutils.BeanUtils;
+import java.text.ParseException;
+
public class ImportableColumnImpl<E, T> implements ImportableColumn<E, T> {
protected String headerName;
@@ -86,7 +88,7 @@
}
@Override
- public T parseValue(String value) {
+ public T parseValue(String value) throws ParseException {
if (valueParser == null) {
throw new UnsupportedOperationException("no parser provided for " + this);
} else {
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParser.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParser.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParser.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -20,8 +20,10 @@
*/
package fr.ifremer.wao.io.csv2;
+import java.text.ParseException;
+
public interface ValueParser<T> {
- T parse(String value);
+ T parse(String value) throws ParseException;
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -23,42 +23,135 @@
import fr.ifremer.wao.bean.ObsProgram;
import fr.ifremer.wao.entity.SampleRow;
import fr.ifremer.wao.entity.SampleRowImpl;
+import fr.ifremer.wao.entity.TerrestrialDivision;
+import fr.ifremer.wao.io.csv2.Common;
import fr.ifremer.wao.io.csv2.ImportModel;
import fr.ifremer.wao.io.csv2.ImportableColumn;
+import fr.ifremer.wao.io.csv2.ImportableColumnImpl;
+import fr.ifremer.wao.io.csv2.ValueParser;
+import fr.ifremer.wao.io.csv2.ValueSetter;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.text.ParseException;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
+/**
+ *
+ */
public class SamplingPlanImportModel implements ImportModel<SampleRow> {
- protected ObsProgram obsProgram;
- public SamplingPlanImportModel(ObsProgram obsProgram) {
- this.obsProgram = obsProgram;
+ private static final Logger log =
+ LoggerFactory.getLogger(SamplingPlanImportModel.class);
+
+ static class ObservationUnitParser implements ValueParser<TerrestrialDivision> {
+
+ protected Map<String, Map<String, TerrestrialDivision>> observationUnits;
+
+ protected String currentRegionCode;
+
+ ObservationUnitParser(Map<String, Map<String, TerrestrialDivision>> observationUnits) {
+ this.observationUnits = observationUnits;
+ }
+
+ @Override
+ public TerrestrialDivision parse(String observationUnitCode) throws ParseException {
+ Map<String, TerrestrialDivision> uos = observationUnits.get(currentRegionCode);
+ if (uos == null) {
+ throw new IllegalArgumentException("Le code de région '" + currentRegionCode + "' n'est pas un code valide");
+ }
+ TerrestrialDivision observationUnit = uos.get(observationUnitCode);
+ if (observationUnit == null) {
+ throw new IllegalArgumentException("Il n'y a pas d'unité '" + observationUnitCode + "' dans cette région");
+ }
+ return observationUnit;
+ }
+
+ public void setCurrentRegionCode(String regionCode) {
+ currentRegionCode = regionCode;
+ }
}
+ static class RegionCodeSetter implements ValueSetter<SampleRow, String> {
+
+ protected ObservationUnitParser observationUnitSetter;
+
+ RegionCodeSetter(ObservationUnitParser observationUnitSetter) {
+ this.observationUnitSetter = observationUnitSetter;
+ }
+
+ @Override
+ public void set(SampleRow sampleRow, String regionCode) throws Exception {
+ observationUnitSetter.setCurrentRegionCode(regionCode);
+ }
+ }
+
+ /** region ifremer code -> UO code -> TerrestrialDivision */
+ protected Map<String, Map<String, TerrestrialDivision>> observationUnits;
+
+ public SamplingPlanImportModel(List<TerrestrialDivision> terrestrialDivisions) {
+
+ observationUnits = new HashMap<String, Map<String, TerrestrialDivision>>();
+ for (TerrestrialDivision terrestrialDivision : terrestrialDivisions) {
+ String regionCode = terrestrialDivision.getRegionIfremerCode();
+ Map<String, TerrestrialDivision> unitCodesToDivision = observationUnits.get(regionCode);
+ if (unitCodesToDivision == null) {
+ unitCodesToDivision = new HashMap<String, TerrestrialDivision>();
+ }
+ unitCodesToDivision.put(terrestrialDivision.getObservationUnitCode(), terrestrialDivision);
+ observationUnits.put(regionCode, unitCodesToDivision);
+ }
+
+ if (log.isDebugEnabled()) {
+ for (Map.Entry<String, Map<String, TerrestrialDivision>> entry : observationUnits.entrySet()) {
+ log.debug(entry.getKey());
+ for (Map.Entry<String, TerrestrialDivision> unitCodesToDivision : entry.getValue().entrySet()) {
+ log.debug(" -> " + unitCodesToDivision.getKey() + " -> " + unitCodesToDivision.getValue());
+ }
+ }
+ }
+ }
+
@Override
public void pushCsvHeaderNames(List<String> headerNames) {
- // discover months
+ // nothing to do
}
@Override
public SampleRow newEmptyInstance() {
SampleRow newSampleRow = new SampleRowImpl();
- newSampleRow.setObsProgram(obsProgram);
+ newSampleRow.setObsProgram(ObsProgram.OBSDEB);
return newSampleRow;
}
@Override
public Collection<ImportableColumn> getAllColumns() {
-
- if (obsProgram == ObsProgram.OBSMER) {
- // add obsMer-only field
- }
- if (obsProgram == ObsProgram.OBSVENTE) {
- // add obsVente-only field
- }
-
- throw new UnsupportedOperationException("not yet implemented");
+ List<ImportableColumn> columns = new LinkedList<ImportableColumn>();
+ columns.add(ImportableColumnImpl.newMandatoryColumn(
+ "PLAN_CODE",
+ new ValueParser<String>() {
+ /** null if string is empty */
+ @Override
+ public String parse(String code) {
+ if (StringUtils.isEmpty(code)) {
+ code = null;
+ }
+ return code;
+ }
+ },
+ SampleRow.PROPERTY_CODE));
+ columns.add(ImportableColumnImpl.newMandatoryColumn("OBSERVATEUR_COD", SampleRow.PROPERTY_GROUP_NAME));
+ columns.add(ImportableColumnImpl.newMandatoryColumn("OBSERVATION_DATE", Common.DAY_PARSER, SampleRow.PROPERTY_DAY));
+ ObservationUnitParser observationUnitParser = new ObservationUnitParser(observationUnits);
+ ValueSetter<SampleRow, String> regionCodeSetter = new RegionCodeSetter(observationUnitParser);
+ columns.add(ImportableColumnImpl.<SampleRow> newMandatoryColumn("REGION_IFREMER_COD", regionCodeSetter));
+ columns.add(ImportableColumnImpl.newMandatoryColumn("UNITE_OBSERVATION_COD", observationUnitParser, SampleRow.PROPERTY_OBSERVATION_UNIT));
+ return columns;
}
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -31,6 +31,7 @@
import fr.ifremer.wao.WaoException;
import fr.ifremer.wao.WaoQueryBuilder;
import fr.ifremer.wao.WaoQueryHelper;
+import fr.ifremer.wao.WaoUtils;
import fr.ifremer.wao.bean.ContactFilter;
import fr.ifremer.wao.bean.ContactState;
import fr.ifremer.wao.bean.LocationType;
@@ -568,8 +569,8 @@
List<TerrestrialLocation> ports = terrestrialLocationDAO.findAllByLocationTypeOrdinal(LocationType.PORT.ordinal());
// from that, deduce a map terrestrial location code -> entity and the set of region codes
- Map<String, TerrestrialLocation> codeToPorts = projectPropertyUnique(ports, TerrestrialLocation.PROPERTY_CODE);
- Set<String> regionCodes = projectProperty(String.class, ports, TerrestrialLocation.PROPERTY_REGION_IFREMER_CODE).keySet();
+ Map<String, TerrestrialLocation> codeToPorts = WaoUtils.projectPropertyUnique(ports, TerrestrialLocation.PROPERTY_CODE);
+ Set<String> regionCodes = WaoUtils.projectProperty(String.class, ports, TerrestrialLocation.PROPERTY_REGION_IFREMER_CODE).keySet();
if (log.isDebugEnabled()) {
log.debug(codeToPorts.size() + " ports, " + regionCodes.size() + " regions");
@@ -623,29 +624,6 @@
}
- protected <T,E> Map<T, List<E>> projectProperty(Class<T> clazz, List<E> elements, String propertyName) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
- Map<T, List<E>> projection = new LinkedHashMap<T, List<E>>();
- for (E element : elements) {
- T key = (T) PropertyUtils.getProperty(element, propertyName);
- List<E> value = projection.get(key);
- if (value == null) {
- value = new LinkedList<E>();
- }
- value.add(element);
- projection.put(key, value);
- }
- return projection;
- }
-
- protected <T,E> Map<T, E> projectPropertyUnique(List<E> elements, String propertyName) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
- Map<T, E> projection = new LinkedHashMap<T, E>();
- for (E element : elements) {
- T key = (T) PropertyUtils.getProperty(element, propertyName);
- projection.put(key, element);
- }
- return projection;
- }
-
protected <E extends TopiaEntity> void createOrUpdate(Class<E> clazz, Iterator<E> entitiesIterator,
TopiaDAO<E> dao, String... idProperties)
throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, TopiaException {
Modified: trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties
===================================================================
--- trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-03-02 13:11:44 UTC (rev 1050)
@@ -20,6 +20,7 @@
GlobalIndicatorValue.VERY_GOOD=Level 2 bonus
LocationType.AUCTION=Auction
LocationType.PORT=Port
+ObsProgram.OBSDEB=ObsDeb
ObsProgram.OBSMER=ObsMer
ObsProgram.OBSVENTE=ObsVente
SamplingStrategy.SIMULTANEOUS_ALL_SPECIES=Simultaneous \: All commercial species
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 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-03-02 13:11:44 UTC (rev 1050)
@@ -1,159 +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=
@@ -162,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)
Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java
===================================================================
--- trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -23,6 +23,8 @@
import fr.ifremer.wao.bean.ObsProgram;
import fr.ifremer.wao.bean.ValidationResult;
import fr.ifremer.wao.entity.SampleRow;
+import fr.ifremer.wao.entity.TerrestrialDivision;
+import fr.ifremer.wao.entity.TerrestrialDivisionImpl;
import fr.ifremer.wao.entity.TerrestrialLocation;
import fr.ifremer.wao.io.csv2.models.SamplingPlanImportModel;
import fr.ifremer.wao.io.csv2.models.TerrestrialLocationImportModel;
@@ -34,6 +36,7 @@
import org.slf4j.LoggerFactory;
import java.io.IOException;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -80,29 +83,43 @@
}
@Test
- @Ignore("not yet implemented")
public void testImportSamplingPlan() throws IOException {
- String csv = "";
+ TerrestrialDivision uo07 = new TerrestrialDivisionImpl();
+ uo07.setRegionIfremerCode("GA");
+ uo07.setObservationUnitCode("UO007");
+ TerrestrialDivision uo87 = new TerrestrialDivisionImpl();
+ uo87.setRegionIfremerCode("MA");
+ uo87.setObservationUnitCode("UO087");
- ImportModel<SampleRow> model = new SamplingPlanImportModel(ObsProgram.OBSMER);
+ List<TerrestrialDivision> terrestrialDivisions = new ArrayList<TerrestrialDivision>();
+ terrestrialDivisions.add(uo07);
+ terrestrialDivisions.add(uo87);
- Import<SampleRow> samplingPlanImport =
- new Import<SampleRow>(model, IOUtils.toInputStream(csv));
+ ImportModel<SampleRow> model = new SamplingPlanImportModel(terrestrialDivisions);
+ InputStream input = null;
+ try {
+ input = getClass().getResourceAsStream("/import/samplingPlan-obsdeb.csv");
+ Import<SampleRow> samplingPlanImport = new Import<SampleRow>(model, input);
- ValidationResult validationResult = samplingPlanImport.validateCsv();
- if (log.isDebugEnabled()) {
- log.debug("validation result message : " + validationResult.getMessage());
- }
- Assert.assertTrue(validationResult.isSuccess());
+ ValidationResult validationResult = samplingPlanImport.validateCsv();
+ if (log.isDebugEnabled()) {
+ log.debug("validation result message : " + validationResult.getMessage());
+ }
+ Assert.assertTrue(validationResult.isSuccess());
- Iterator<SampleRow> it = samplingPlanImport.startImport();
+ Iterator<SampleRow> it = samplingPlanImport.startImport();
- List<SampleRow> sampleRows = new ArrayList<SampleRow>();
- while (it.hasNext()) {
- SampleRow sampleRow = it.next();
- sampleRows.add(sampleRow);
+ List<SampleRow> sampleRows = new ArrayList<SampleRow>();
+ while (it.hasNext()) {
+ SampleRow sampleRow = it.next();
+ sampleRows.add(sampleRow);
+ if (log.isDebugEnabled()) {
+ log.debug(sampleRow.getObservationUnit().getObservationUnitCode());
+ }
+ }
+ } finally {
+ IOUtils.closeQuietly(input);
}
-
}
}
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -48,7 +48,7 @@
UserRole[] allowedRoles() default
{UserRole.OBSERVER, UserRole.ADMIN, UserRole.COORDINATOR, UserRole.GUEST, UserRole.PROFESSIONAL};
- ObsProgram[] allowedPrograms() default {ObsProgram.OBSMER, ObsProgram.OBSVENTE};
+ ObsProgram[] allowedPrograms() default {ObsProgram.OBSMER, ObsProgram.OBSVENTE, ObsProgram.OBSDEB};
boolean readOnlyAllowed() default true;
}
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java 2011-03-02 12:15:11 UTC (rev 1049)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Cartography.java 2011-03-02 13:11:44 UTC (rev 1050)
@@ -23,6 +23,7 @@
import fr.ifremer.wao.bean.ConnectedUser;
import fr.ifremer.wao.bean.ContactFilter;
import fr.ifremer.wao.bean.ContactFilterImpl;
+import fr.ifremer.wao.bean.ObsProgram;
import fr.ifremer.wao.bean.UserRole;
import fr.ifremer.wao.bean.WaoFilter;
import fr.ifremer.wao.entity.Company;
@@ -51,7 +52,7 @@
* @author fdesbois <fdesbois at codelutin.com>
* @version $Id$
*/
- at RequiresAuthentication(allowedRoles = {UserRole.ADMIN, UserRole.COORDINATOR, UserRole.OBSERVER, UserRole.PROFESSIONAL})
+ at RequiresAuthentication(allowedPrograms = {ObsProgram.OBSMER, ObsProgram.OBSVENTE}, allowedRoles = {UserRole.ADMIN, UserRole.COORDINATOR, UserRole.OBSERVER, UserRole.PROFESSIONAL})
public class Cartography {
@SessionState
1
0
Author: bleny
Date: 2011-03-02 12:15:11 +0000 (Wed, 02 Mar 2011)
New Revision: 1049
Log:
add wao version in war display-name
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-03-02 12:14:51 UTC (rev 1048)
+++ trunk/pom.xml 2011-03-02 12:15:11 UTC (rev 1049)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4labs</artifactId>
- <version>2.5.1</version>
+ <version>2.5.2-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer</groupId>
1
0
[Suiviobsmer-commits] r1048 - trunk/wao-ui/src/main/webapp/WEB-INF
by bleny@users.labs.libre-entreprise.org 02 Mar '11
by bleny@users.labs.libre-entreprise.org 02 Mar '11
02 Mar '11
Author: bleny
Date: 2011-03-02 12:14:51 +0000 (Wed, 02 Mar 2011)
New Revision: 1048
Log:
add wao version in war display-name
Modified:
trunk/wao-ui/src/main/webapp/WEB-INF/web.xml
Modified: trunk/wao-ui/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/wao-ui/src/main/webapp/WEB-INF/web.xml 2011-02-28 17:32:58 UTC (rev 1047)
+++ trunk/wao-ui/src/main/webapp/WEB-INF/web.xml 2011-03-02 12:14:51 UTC (rev 1048)
@@ -27,7 +27,7 @@
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
- <display-name>Wao</display-name>
+ <display-name>Wao ${project.version}</display-name>
<context-param>
<!-- The only significant configuration for Tapestry 5, this informs Tapestry
of where to look for pages, components and mixins. -->
1
0
[Suiviobsmer-commits] r1047 - trunk/wao-business/src/main/java/fr/ifremer/wao
by bleny@users.labs.libre-entreprise.org 28 Feb '11
by bleny@users.labs.libre-entreprise.org 28 Feb '11
28 Feb '11
Author: bleny
Date: 2011-02-28 17:32:58 +0000 (Mon, 28 Feb 2011)
New Revision: 1047
Log:
add migration for wao 3.0
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java
trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-02-28 17:12:10 UTC (rev 1046)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-02-28 17:32:58 UTC (rev 1047)
@@ -791,4 +791,23 @@
// Here we deal with a user who want to update data but miss the feature in Wao
queries.add("UPDATE FishingZone SET districtCode='GSA07' WHERE topiaId='fr.ifremer.wao.entity.FishingZone#1264666466997#0.7383156631150655'");
}
+
+ @Override
+ protected void addTerrestrialDivisions_3_0(List<String> queries) {
+ queries.add("CREATE TABLE TerrestrialDivision (" +
+ "topiaId CHARACTER VARYING(255) PRIMARY KEY," +
+ "topiaVersion BIGINT NOT NULL," +
+ "topiaCreateDate TIMESTAMP WITHOUT TIME ZONE NOT NULL," +
+ "code CHARACTER VARYING(255)," +
+ "skillZoneCode CHARACTER VARYING(255)," +
+ "skillZoneName CHARACTER VARYING(255)," +
+ "subPopulationCode CHARACTER VARYING(255)," +
+ "subPopulationName CHARACTER VARYING(255)," +
+ "observationUnitCode CHARACTER VARYING(255)," +
+ "observationUnitName CHARACTER VARYING(255)," +
+ "regionIfremerCode CHARACTER VARYING(255)," +
+ "port CHARACTER VARYING(255) NOT NULL," +
+ "CONSTRAINT port_fkey FOREIGN KEY (port) " +
+ "REFERENCES TerrestrialLocation (topiaid));");
+ }
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2011-02-28 17:12:10 UTC (rev 1046)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2011-02-28 17:32:58 UTC (rev 1047)
@@ -131,6 +131,8 @@
protected abstract void correctFishingZoneReferential_2_1(List<String> queries);
+ protected abstract void addTerrestrialDivisions_3_0(List<String> queries);
+
protected static final Version[] VERSIONS = new Version[] {
VersionUtil.valueOf("1.0"),
VersionUtil.valueOf("1.1"),
@@ -140,7 +142,8 @@
VersionUtil.valueOf("1.5"),
VersionUtil.valueOf("1.6"),
VersionUtil.valueOf("2.0"),
- VersionUtil.valueOf("2.1")
+ VersionUtil.valueOf("2.1"),
+ VersionUtil.valueOf("3.0")
};
@Override
@@ -462,4 +465,16 @@
executeSQL(tx, showSql, showProgression, strings);
}
+
+ public void migrateTo_3_0(TopiaContextImplementor tx,
+ boolean showSql,
+ boolean showProgression) throws TopiaException {
+
+ List<String> queries = new LinkedList<String>();
+
+ addTerrestrialDivisions_3_0(queries);
+
+ String[] strings = queries.toArray(new String[queries.size()]);
+ executeSQL(tx, showSql, showProgression, strings);
+ }
}
1
0
[Suiviobsmer-commits] r1046 - in trunk/wao-business/src: main/java/fr/ifremer/wao/io/csv2 main/java/fr/ifremer/wao/io/csv2/models main/java/fr/ifremer/wao/service main/resources/i18n main/xmi test/java/fr/ifremer/wao/service test/resources/import
by bleny@users.labs.libre-entreprise.org 28 Feb '11
by bleny@users.labs.libre-entreprise.org 28 Feb '11
28 Feb '11
Author: bleny
Date: 2011-02-28 17:12:10 +0000 (Mon, 28 Feb 2011)
New Revision: 1046
Log:
add terrestrial division import
Added:
trunk/wao-business/src/test/resources/import/terrestrialDivisions.csv
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialDivisionImportModel.java
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java
trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties
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/service/ServiceReferentialImplTest.java
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java 2011-02-28 10:32:35 UTC (rev 1045)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java 2011-02-28 17:12:10 UTC (rev 1046)
@@ -70,6 +70,9 @@
}
public Import(ImportModel<E> model, InputStream inputStream) {
+ if (inputStream == null) {
+ throw new NullPointerException("inputStream is null");
+ }
this.model = model;
validateModel();
this.reader = new CsvReader(inputStream, ';', Charset.forName("UTF-8"));
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialDivisionImportModel.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialDivisionImportModel.java 2011-02-28 10:32:35 UTC (rev 1045)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialDivisionImportModel.java 2011-02-28 17:12:10 UTC (rev 1046)
@@ -7,6 +7,8 @@
import fr.ifremer.wao.io.csv2.ImportableColumn;
import fr.ifremer.wao.io.csv2.ImportableColumnImpl;
import fr.ifremer.wao.io.csv2.ValueParser;
+import org.apache.commons.lang.StringUtils;
+import org.nuiton.util.StringUtil;
import java.util.ArrayList;
import java.util.Collection;
@@ -46,15 +48,26 @@
public Collection<ImportableColumn> getAllColumns() {
List<ImportableColumn> columns = new ArrayList<ImportableColumn>();
- columns.add(ImportableColumnImpl.newMandatoryColumn("ID_STRATE", TerrestrialDivision.PROPERTY_CODE));
- // add validation while parsing
columns.add(ImportableColumnImpl.newMandatoryColumn(
+ "ID_STRATE",
+ new ValueParser<String>() {
+ /** null if string is empty */
+ @Override
+ public String parse(String code) {
+ if (StringUtils.isEmpty(code)) {
+ throw new IllegalArgumentException("Il manque un code ID_STRATE");
+ }
+ return code;
+ }
+ },
+ TerrestrialDivision.PROPERTY_CODE));
+ columns.add(ImportableColumnImpl.newMandatoryColumn(
"REGION_IFREMER_COD",
- // just validate the region code
new ValueParser<String>() {
+ /** validate region code */
@Override
public String parse(String regionCode) {
- if (regionCodes.contains(regionCode)) {
+ if ( ! regionCodes.contains(regionCode)) {
throw new IllegalArgumentException("Le code '" + regionCode + "' n'est pas un code de région valide");
}
return regionCode;
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-02-28 10:32:35 UTC (rev 1045)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-02-28 17:12:10 UTC (rev 1046)
@@ -33,7 +33,10 @@
import fr.ifremer.wao.WaoQueryHelper;
import fr.ifremer.wao.bean.ContactFilter;
import fr.ifremer.wao.bean.ContactState;
+import fr.ifremer.wao.bean.LocationType;
import fr.ifremer.wao.bean.SamplingFilter;
+import fr.ifremer.wao.entity.Boat;
+import fr.ifremer.wao.entity.BoatDAO;
import fr.ifremer.wao.entity.ContactStateMotif;
import fr.ifremer.wao.entity.ContactStateMotifDAO;
import fr.ifremer.wao.entity.ContactStateMotifImpl;
@@ -45,18 +48,29 @@
import fr.ifremer.wao.entity.ProfessionDAO;
import fr.ifremer.wao.entity.TargetSpeciesDCF;
import fr.ifremer.wao.entity.TargetSpeciesDCFDAO;
+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.TerrestrialLocationImpl;
+import fr.ifremer.wao.io.ImportRefusedException;
import fr.ifremer.wao.io.csv.ImportHelper;
import fr.ifremer.wao.io.csv.WaoCsvHeader.FISHING_ZONE;
import fr.ifremer.wao.io.csv2.Import;
import fr.ifremer.wao.io.csv2.ImportModel;
+import fr.ifremer.wao.io.csv2.models.TerrestrialDivisionImportModel;
import fr.ifremer.wao.io.csv2.models.TerrestrialLocationImportModel;
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.beanutils.PropertyUtilsBean;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.persistence.TopiaDAO;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.util.CollectionUtil;
import org.nuiton.util.beans.Binder;
import org.nuiton.util.beans.BinderFactory;
import org.slf4j.Logger;
@@ -64,13 +78,19 @@
import java.io.IOException;
import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
/**
* ServiceReferentialImpl
@@ -538,4 +558,113 @@
}
}
}
+
+ @Override
+ protected void executeImportTerrestrialDivisions(TopiaContext transaction, InputStream input) throws Exception {
+
+ TerrestrialLocationDAO terrestrialLocationDAO = WaoDAOHelper.getTerrestrialLocationDAO(transaction);
+
+ // let's find all ports in terrestrial location reference
+ List<TerrestrialLocation> ports = terrestrialLocationDAO.findAllByLocationTypeOrdinal(LocationType.PORT.ordinal());
+
+ // from that, deduce a map terrestrial location code -> entity and the set of region codes
+ Map<String, TerrestrialLocation> codeToPorts = projectPropertyUnique(ports, TerrestrialLocation.PROPERTY_CODE);
+ Set<String> regionCodes = projectProperty(String.class, ports, TerrestrialLocation.PROPERTY_REGION_IFREMER_CODE).keySet();
+
+ if (log.isDebugEnabled()) {
+ log.debug(codeToPorts.size() + " ports, " + regionCodes.size() + " regions");
+ log.debug("regionCodes = " + regionCodes);
+ }
+
+ // the import itself
+ ImportModel<TerrestrialDivision> importModel = new TerrestrialDivisionImportModel(codeToPorts, regionCodes);
+ Import<TerrestrialDivision> terrestrialDivisionImport = new Import<TerrestrialDivision>(importModel, input);
+
+ TerrestrialDivisionDAO dao = WaoDAOHelper.getTerrestrialDivisionDAO(transaction);
+// // a binder, needed for update
+// Binder<TerrestrialDivision, TerrestrialDivision> terrestrialDivisionBinder =
+// BinderFactory.newBinder(TerrestrialDivision.class);
+//
+// try {
+// Iterator<TerrestrialDivision> terrestrialDivisionIterator = terrestrialDivisionImport.startImport();
+//
+// // for each line of the CSV
+// while (terrestrialDivisionIterator.hasNext()) {
+// TerrestrialDivision terrestrialDivision = terrestrialDivisionIterator.next();
+//
+// TerrestrialDivision existingTerrestrialDivision = dao.findByCode(terrestrialDivision.getCode());
+// if (existingTerrestrialDivision == null) {
+// // add as new
+// dao.create(terrestrialDivision);
+// } else {
+// // update the old one
+// terrestrialDivisionBinder.copyExcluding(terrestrialDivision, existingTerrestrialDivision,
+// TopiaEntity.TOPIA_ID, TopiaEntity.TOPIA_CREATE_DATE, TopiaEntity.TOPIA_VERSION);
+// dao.update(existingTerrestrialDivision);
+// }
+// }
+// } catch (Exception e) {
+// transaction.rollbackTransaction();
+// throw e;
+// } finally {
+// terrestrialDivisionImport.stopImport();
+// }
+
+
+ try {
+ Iterator<TerrestrialDivision> terrestrialDivisionIterator = terrestrialDivisionImport.startImport();
+ createOrUpdate(TerrestrialDivision.class, terrestrialDivisionIterator, dao, TerrestrialDivision.PROPERTY_CODE);
+ } catch (Exception e) {
+ transaction.rollbackTransaction();
+ throw e;
+ } finally {
+ terrestrialDivisionImport.stopImport();
+ }
+
+ }
+
+ protected <T,E> Map<T, List<E>> projectProperty(Class<T> clazz, List<E> elements, String propertyName) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+ Map<T, List<E>> projection = new LinkedHashMap<T, List<E>>();
+ for (E element : elements) {
+ T key = (T) PropertyUtils.getProperty(element, propertyName);
+ List<E> value = projection.get(key);
+ if (value == null) {
+ value = new LinkedList<E>();
+ }
+ value.add(element);
+ projection.put(key, value);
+ }
+ return projection;
+ }
+
+ protected <T,E> Map<T, E> projectPropertyUnique(List<E> elements, String propertyName) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException {
+ Map<T, E> projection = new LinkedHashMap<T, E>();
+ for (E element : elements) {
+ T key = (T) PropertyUtils.getProperty(element, propertyName);
+ projection.put(key, element);
+ }
+ return projection;
+ }
+
+ protected <E extends TopiaEntity> void createOrUpdate(Class<E> clazz, Iterator<E> entitiesIterator,
+ TopiaDAO<E> dao, String... idProperties)
+ throws InvocationTargetException, NoSuchMethodException, IllegalAccessException, TopiaException {
+ Binder<E, E> binder = BinderFactory.newBinder(clazz);
+ while (entitiesIterator.hasNext()) {
+ E entity = entitiesIterator.next();
+ Map<String, Object> properties = new HashMap<String, Object>();
+ for (String idProperty : idProperties) {
+ properties.put(idProperty, PropertyUtils.getProperty(entity, idProperty));
+ }
+ E existingEntity = dao.findByProperties(properties);
+ if (existingEntity == null) {
+ dao.create(entity);
+ } else {
+ binder.copyExcluding(entity, existingEntity,
+ TopiaEntity.TOPIA_ID, TopiaEntity.TOPIA_CREATE_DATE, TopiaEntity.TOPIA_VERSION);
+ dao.update(existingEntity);
+ }
+ }
+
+ }
}
Modified: trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties
===================================================================
--- trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-02-28 10:32:35 UTC (rev 1045)
+++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-02-28 17:12:10 UTC (rev 1046)
@@ -177,6 +177,7 @@
wao.error.serviceReferential.importDCFcodes=
wao.error.serviceReferential.importFishingZoneCsv=
wao.error.serviceReferential.importInitialContactStateMotifs=
+wao.error.serviceReferential.importTerrestrialDivisions=
wao.error.serviceReferential.importTerrestrialLocations=
wao.error.serviceReferential.updateAllContactStatesMotifs=
wao.error.serviceSampling.createSampleRowLog=
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-02-28 10:32:35 UTC (rev 1045)
+++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-02-28 17:12:10 UTC (rev 1046)
@@ -177,6 +177,7 @@
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=
Modified: trunk/wao-business/src/main/xmi/wao.zargo
===================================================================
(Binary files differ)
Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialImplTest.java
===================================================================
--- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialImplTest.java 2011-02-28 10:32:35 UTC (rev 1045)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceReferentialImplTest.java 2011-02-28 17:12:10 UTC (rev 1046)
@@ -33,6 +33,7 @@
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
+import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -157,4 +158,11 @@
assertEquals(6, result);
}
+ @Test
+ @Ignore("raise an exception due to business consistency, validation works")
+ public void testImportTerrestrialDivision() {
+ InputStream input = getClass().getResourceAsStream("/import/terrestrialDivisions.csv");
+ service.importTerrestrialDivisions(input);
+ }
+
}
Added: trunk/wao-business/src/test/resources/import/terrestrialDivisions.csv
===================================================================
--- trunk/wao-business/src/test/resources/import/terrestrialDivisions.csv (rev 0)
+++ trunk/wao-business/src/test/resources/import/terrestrialDivisions.csv 2011-02-28 17:12:10 UTC (rev 1046)
@@ -0,0 +1,418 @@
+"ID_STRATE";"REGION_IFREMER_COD";"REGION_IFREMER_LIB";"ZONE_COMPETENCE_COD";"ZONE_COMPETENCE_LIB";"SOUS_POPULATION_COD";"SOUS_POPULATION_LIB";"UNITE_OBSERVATION_COD";"UNITE_OBSERVATION_LIB";"LIEU_OBSERVATION_COD";"LIEU_OBSERVATION_LIB";"DATE_DEBUT";"DATE_FIN"
+278;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO207";"SM-Anse Dufour";"OF3";"SM-Anse Dufour";01/01/2009 00:00:00,000000000;""
+279;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO223";"PR-Anse Céron";"SF1";"PR-Anse Céron";01/01/2009 00:00:00,000000000;""
+280;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO224";"PR-Anse Belleville";"SF2";"PR-Anse Belleville";01/01/2009 00:00:00,000000000;""
+281;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO226";"PR-Bourg du Prêcheur";"SF4";"PR-Bourg du Prêcheur";01/01/2009 00:00:00,000000000;""
+282;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO227";"PR-Pointe Lamare";"SF5";"PR-Pointe Lamare";01/01/2009 00:00:00,000000000;""
+283;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO229";"PR-Charmeuse";"SF7";"PR-Charmeuse";01/01/2009 00:00:00,000000000;""
+284;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO234";"SP-Sainte Philomène";"TF1";"SP-Sainte Philomène";01/01/2009 00:00:00,000000000;""
+285;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO235";"SP-Fond Corre";"TF2";"SP-Fond Corre";01/01/2009 00:00:00,000000000;""
+286;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO236";"SP-La Galère";"TF3";"SP-La Galère";01/01/2009 00:00:00,000000000;""
+287;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO249";"BF-Fond Capot";"VF1";"BF-Fond Capot";01/01/2009 00:00:00,000000000;""
+288;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO251";"BF-Fond Boucher";"VF3";"BF-Fond Boucher";01/01/2009 00:00:00,000000000;""
+289;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO256";"CP-Fond Bourlet";"WF2";"CP-Fond Bourlet";01/01/2009 00:00:00,000000000;""
+290;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO258";"SH-Fond Bernier";"XF1";"SH-Fond Bernier";01/01/2009 00:00:00,000000000;""
+291;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO260";"SH-Anse Madame";"XF3";"SH-Anse Madame";01/01/2009 00:00:00,000000000;""
+292;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO261";"SH-Schoelcher (Bourg)";"XF4";"SH-Schoelcher (Bourg)";01/01/2009 00:00:00,000000000;""
+293;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO262";"SH-Anse Gouraud";"XF5";"SH-Anse Gouraud";01/01/2009 00:00:00,000000000;""
+294;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO263";"Fort-de-France";"XFF";"Fort-de-France";01/01/2009 00:00:00,000000000;""
+295;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP01";"Mer Prud. St-Cyprien + Etangs Capellans et Canet";"UO001";"Cerbère, Banyuls-sur-mer, Port-Vendres";"KPV";"Cerbère";01/01/2009 00:00:00,000000000;""
+296;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP01";"Mer Prud. St-Cyprien + Etangs Capellans et Canet";"UO001";"Cerbère, Banyuls-sur-mer, Port-Vendres";"APV";"Banyuls-sur-Mer";01/01/2009 00:00:00,000000000;""
+297;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP01";"Mer Prud. St-Cyprien + Etangs Capellans et Canet";"UO001";"Cerbère, Banyuls-sur-mer, Port-Vendres";"XPV";"Port-Vendres";01/01/2009 00:00:00,000000000;""
+298;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP01";"Mer Prud. St-Cyprien + Etangs Capellans et Canet";"UO002";"Collioure, Argelès-sur-Mer, le Racou";"LPV";"Collioure";01/01/2009 00:00:00,000000000;""
+299;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP01";"Mer Prud. St-Cyprien + Etangs Capellans et Canet";"UO002";"Collioure, Argelès-sur-Mer, le Racou";"BPV";"Argelès-sur-Mer, Le Racou";01/01/2009 00:00:00,000000000;""
+300;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP01";"Mer Prud. St-Cyprien + Etangs Capellans et Canet";"UO003";"Saint-Cyprien, Canet-en-Roussillon";"CPV";"Saint-Cyprien";01/01/2009 00:00:00,000000000;""
+301;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP01";"Mer Prud. St-Cyprien + Etangs Capellans et Canet";"UO003";"Saint-Cyprien, Canet-en-Roussillon";"DPV";"Canet-en-Roussillon";01/01/2009 00:00:00,000000000;""
+302;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP02";"Mer Prud. St Laurent-Salanque et Leucate + Etang Salse-Leucate";"UO004";"Port St Ange, Port Leucate";"FPV";"Port-Leucate";01/01/2009 00:00:00,000000000;""
+303;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP02";"Mer Prud. St Laurent-Salanque et Leucate + Etang Salse-Leucate";"UO004";"Port St Ange, Port Leucate";"MPV";"Port St Ange";01/01/2009 00:00:00,000000000;""
+304;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP02";"Mer Prud. St Laurent-Salanque et Leucate + Etang Salse-Leucate";"UO005";"Etang de Salse-Leucate, Port bacarés - Port Fitou, Grau de Leucate";"EPV";"Etang de Salse-Leucate, Port Barcarès";01/01/2009 00:00:00,000000000;""
+305;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP02";"Mer Prud. St Laurent-Salanque et Leucate + Etang Salse-Leucate";"UO005";"Etang de Salse-Leucate, Port bacarés - Port Fitou, Grau de Leucate";"NPV";"Grau de Leucate";01/01/2009 00:00:00,000000000;""
+306;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP02";"Mer Prud. St Laurent-Salanque et Leucate + Etang Salse-Leucate";"UO005";"Etang de Salse-Leucate, Port bacarés - Port Fitou, Grau de Leucate";"OPV";"Etang de Salse-Leucate, Port-Fitou";01/01/2009 00:00:00,000000000;""
+307;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP03";"Mer Prud. Port-la-Nouvelle et Gruissan et Etangs";"UO006";"Port-la-Nouvelle (mer)";"GPV1";"Port-la-Nouvelle - Mer";01/01/2009 00:00:00,000000000;""
+308;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP03";"Mer Prud. Port-la-Nouvelle et Gruissan et Etangs";"UO007";"Etang de Bages-Sigean, Port-la-Nouvelle - Bages - Peyriac de mer";"GPV2";"Port-la-Nouvelle - Etang";01/01/2009 00:00:00,000000000;""
+309;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP03";"Mer Prud. Port-la-Nouvelle et Gruissan et Etangs";"UO007";"Etang de Bages-Sigean, Port-la-Nouvelle - Bages - Peyriac de mer";"QPV";"Etang de Bages-Sigean, Bages";01/01/2009 00:00:00,000000000;""
+310;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP03";"Mer Prud. Port-la-Nouvelle et Gruissan et Etangs";"UO007";"Etang de Bages-Sigean, Port-la-Nouvelle - Bages - Peyriac de mer";"IPV";"Etang de Bages-Sigean, Peyriac de mer";01/01/2009 00:00:00,000000000;""
+311;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP03";"Mer Prud. Port-la-Nouvelle et Gruissan et Etangs";"UO008";"Gruissan, Etangs Ayrolle, Campignol, Grazel";"JPV";"Etang de l'Ayrolle";01/01/2009 00:00:00,000000000;""
+312;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP03";"Mer Prud. Port-la-Nouvelle et Gruissan et Etangs";"UO008";"Gruissan, Etangs Ayrolle, Campignol, Grazel";"HPV2";"Gruissan - Etang";01/01/2009 00:00:00,000000000;""
+313;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP03";"Mer Prud. Port-la-Nouvelle et Gruissan et Etangs";"UO009";"Gruissan Mer";"HPV1";"Gruissan - Mer";01/01/2009 00:00:00,000000000;""
+314;"LR";"Languedoc-Roussillon";"ZC01";"Quartier maritme de Port-Vendres";"SP04";"Mer Prud. Port-la-Nouvelle et Gruissan et Etangs";"UO010";"Les Cabanes de Fleury";"PPV";"Les Cabanes de Fleury";01/01/2009 00:00:00,000000000;""
+315;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP05";"Mer Prud. Valras et Agde";"UO011";"Valras-Plage";"AST";"Valras-Plage";01/01/2009 00:00:00,000000000;""
+316;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP05";"Mer Prud. Valras et Agde";"UO012";"Grau d'Agde";"BST";"Grau d'Agde";01/01/2009 00:00:00,000000000;""
+317;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP05";"Mer Prud. Valras et Agde";"UO013";"Cap d'Agde";"CST";"Cap d'Agde";01/01/2009 00:00:00,000000000;""
+318;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP05";"Mer Prud. Valras et Agde";"UO014";"Marseillan-plage";"LST";"Marseillan-plage";01/01/2009 00:00:00,000000000;""
+319;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP06";"Sète môle et étang";"UO015";"Etang de Thau, Pte Courte, Barrou, Zup";"QST";"Etang de Thau, Pte Courte, Barrou, Zup";01/01/2009 00:00:00,000000000;""
+320;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP06";"Sète môle et étang";"UO016";"Sète, tous les ports";"PST";"Sète-Mole et canaux";01/01/2009 00:00:00,000000000;""
+321;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP06";"Sète môle et étang";"UO016";"Sète, tous les ports";"XST";"Sète, tous les ports";01/01/2009 00:00:00,000000000;""
+322;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP07";"Prud. Palavas mer et étangs";"UO017";"Frontignan (mer)";"EST";"Frontignan";01/01/2009 00:00:00,000000000;""
+323;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP07";"Prud. Palavas mer et étangs";"UO018";"Etangs frontignanais et palavasiens";"NST";"Etang d'Ingril, Les Aresquiers";01/01/2009 00:00:00,000000000;""
+324;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP07";"Prud. Palavas mer et étangs";"UO018";"Etangs frontignanais et palavasiens";"IST";"Etangs de Vic, Moures, Arnel, Prévost, P. Blanches";01/01/2009 00:00:00,000000000;""
+325;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP07";"Prud. Palavas mer et étangs";"UO018";"Etangs frontignanais et palavasiens";"SST";"Etang de Pérols, Port de Carême";01/01/2009 00:00:00,000000000;""
+326;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP07";"Prud. Palavas mer et étangs";"UO019";"Palavas-les-Flots, Carnon-Plage";"FST";"Palavas-les-Flots";01/01/2009 00:00:00,000000000;""
+327;"LR";"Languedoc-Roussillon";"ZC02";"Sète, partie mer de l'hérault";"SP07";"Prud. Palavas mer et étangs";"UO019";"Palavas-les-Flots, Carnon-Plage";"OST";"Carnon-Plage";01/01/2009 00:00:00,000000000;""
+328;"LR";"Languedoc-Roussillon";"ZC03";"Sète, étangs de Thau et de Mauguio - port du Grau du roi";"SP08";"Prud. Etang de Thau";"UO020";"Etang de Thau, Marseillan";"DST";"Etang de Thau, Marseillan";01/01/2009 00:00:00,000000000;""
+329;"LR";"Languedoc-Roussillon";"ZC03";"Sète, Etangs de Thau et de Mauguio - port du Grau du roi";"SP08";"Prud. Etang de Thau";"UO021";"Etang de Thau, Mèze, le Mourre Blanc";"JST";"Etang de Thau, Mèze, le Mourre Blanc";01/01/2009 00:00:00,000000000;""
+330;"LR";"Languedoc-Roussillon";"ZC03";"Sète, Etangs de Thau et de Mauguio - port du Grau du roi";"SP08";"Prud. Etang de Thau";"UO022";"Etang de Thau, Bouzigues+Loupian - Balaruc";"KST";"Etang de Thau, Bouzigues";01/01/2009 00:00:00,000000000;""
+331;"LR";"Languedoc-Roussillon";"ZC03";"Sète, Etangs de Thau et de Mauguio - port du Grau du roi";"SP08";"Prud. Etang de Thau";"UO022";"Etang de Thau, Bouzigues+Loupian - Balaruc";"MST";"Etang de Thau, Balaruc";01/01/2009 00:00:00,000000000;""
+332;"LR";"Languedoc-Roussillon";"ZC03";"Sète, Etangs de Thau et de Mauguio - port du Grau du roi";"SP09";"Prud. Du Grau du Roi (mer et étang) et Etang de Mauguio";"UO023";"Le-Grau-du-Roi";"GST";"Le-Grau-du-Roi";01/01/2009 00:00:00,000000000;""
+333;"LR";"Languedoc-Roussillon";"ZC03";"Sète, Etangs de Thau et de Mauguio - port du Grau du roi";"SP09";"Prud. Du Grau du Roi (mer et étang) et Etang de Mauguio";"UO024";"Etang de Mauguio (Cabanes de Mauguio et Lunel) et du Gard";"HST";"Etang Mauguio, Cabanes de Mauguio, Lunel, Pérols";01/01/2009 00:00:00,000000000;""
+334;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest,de Port-Saint-Louis-du-Rhône à Méjean";"SP01";"Cabanes de Beauduc";"UO001";"Cabanes de Beauduc";"HMT";"Cabanes de Beauduc";01/01/2009 00:00:00,000000000;""
+335;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP02";"Port-Saint-Louis-du-Rhône";"UO002";"Port-Saint-Louis-du-Rhône";"BMT";"Port-Saint-Louis-du-Rhône";01/01/2009 00:00:00,000000000;""
+336;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP02";"Port-Saint-Louis-du-Rhône";"UO003";"Les Salins de Giraud";"IMT";"Les Salins de Giraud";01/01/2009 00:00:00,000000000;""
+337;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP02";"Port-Saint-Louis-du-Rhône";"UO004";"Port de Carteau";"JMT";"Port de Carteau";01/01/2009 00:00:00,000000000;""
+338;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP03";"Port-de-Bouc";"UO005";"Port-de-Bouc, anse Aubran";"CMT";"Port-de-Bouc, Anse Aubran";01/01/2009 00:00:00,000000000;""
+339;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP03";"Port-de-Bouc";"UO006";"Fos sur Mer, port St Gervais";"KMT";"Fos sur Mer, port St Gervais";01/01/2009 00:00:00,000000000;""
+340;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP04";"Etang de Berre";"UO007";"Etang de Berre, Saint-Chamas";"DMT";"Etang de Berre, Saint-Chamas";01/01/2009 00:00:00,000000000;""
+341;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP04";"Etang de Berre";"UO007";"Etang de Berre, Saint-Chamas";"EMT";"Ensemble de l'Etang de Berre";01/01/2009 00:00:00,000000000;""
+342;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP04";"Etang de Berre";"UO008";"Etang de Berre, Marignane";"FMT";"Etang de Berre, Marignane";01/01/2009 00:00:00,000000000;""
+343;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP04";"Etang de Berre";"UO009";"Etang de Berre, Istre - hres Claires";"LMT";"Etang de Berre, Istres -les heures Claires";01/01/2009 00:00:00,000000000;""
+344;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP04";"Etang de Berre";"UO010";"Etang de Berre, Berre - port passet";"MMT";"Etang de Berre, Berre - Port de passet";01/01/2009 00:00:00,000000000;""
+345;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP04";"Etang de Berre";"UO011";"Etang de Berre, La Mède";"NMT";"Etang de Berre, La Mède";01/01/2009 00:00:00,000000000;""
+346;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP05";"Martigues";"UO012";"Martigues";"XMT";"Martigues";01/01/2009 00:00:00,000000000;""
+347;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP05";"Martigues";"UO012";"Martigues";"OMT";"Port de Ponteau";01/01/2009 00:00:00,000000000;""
+348;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP06";"De Sausset-les-Pins à Méjean";"UO013";"Sausset-les-Pins";"AMA";"Sausset-les-Pins";01/01/2009 00:00:00,000000000;""
+349;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP06";"De Sausset-les-Pins à Méjean";"UO014";"Carry-le-Rouet";"BMA";"Carry-le-Rouet";01/01/2009 00:00:00,000000000;""
+350;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP06";"De Sausset-les-Pins à Méjean";"UO015";"La Redonne, Méjean";"EMA";"La Redonne, Méjean";01/01/2009 00:00:00,000000000;""
+351;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP07";"Sainte-Maries-de-la-Mer";"UO016";"Sainte-Maries-de-la-Mer";"AMT";"Saintes-Maries-de-la-Mer, Port Cardian";01/01/2009 00:00:00,000000000;""
+352;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP08";"Carro";"UO017";"Carro";"QMT";"Carro";01/01/2009 00:00:00,000000000;""
+353;"PA";"Provence-Alpes-Côte d'Azur";"ZC04";"PACA-ouest, de Port-Saint-Louis-du-Rhône à Méjean";"SP08";"Carro";"UO018";"Anse des Laurons";"PMT";"Anse des laurons";01/01/2009 00:00:00,000000000;""
+354;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP09";"Marseille";"UO019";"L'Estaque";"FMA";"L'Estaque";01/01/2009 00:00:00,000000000;""
+355;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP09";"Marseille";"UO020";"Vieux Port de Marseille-Port de Frioul (ile de)-Vallon des Auffes";"HMA";"Vieux Port de Marseille";01/01/2009 00:00:00,000000000;""
+356;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP09";"Marseille";"UO020";"Vieux Port de Marseille-Port de Frioul (ile de)-Vallon des Auffes";"IMA";"Vallon des Auffes";01/01/2009 00:00:00,000000000;""
+357;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP09";"Marseille";"UO020";"Vieux Port de Marseille-Port de Frioul (ile de)-Vallon des Auffes";"XMA";"Marseille";01/01/2009 00:00:00,000000000;""
+358;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP09";"Marseille";"UO021";"Saumaty";"GMA";"Saumaty";01/01/2009 00:00:00,000000000;""
+359;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP09";"Marseille";"UO022";"Port des Goudes - Callanques de Callelongue";"KMA";"Port des Goudes";01/01/2009 00:00:00,000000000;""
+360;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP09";"Marseille";"UO023";"La Madrague de Montredon - Pointe Rouge";"JMA";"La Madrague de Montredon";01/01/2009 00:00:00,000000000;""
+361;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP10";"Cassis";"UO024";"Calanque de Sormiou - Port de Morgiou";"LMA";"Calanque de Sormiou";01/01/2009 00:00:00,000000000;""
+362;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP10";"Cassis";"UO024";"Calanque de Sormiou - Port de Morgiou";"MMA";"Port de Morgiou";01/01/2009 00:00:00,000000000;""
+363;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP10";"Cassis";"UO025";"Calanque de Port-Miou";"NMA";"Calanque de Port-Miou";01/01/2009 00:00:00,000000000;""
+364;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP10";"Cassis";"UO026";"Cassis";"CMA";"Cassis";01/01/2009 00:00:00,000000000;""
+365;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP11";"La Ciotat";"UO027";"La Ciotat";"DMA";"La Ciotat";01/01/2009 00:00:00,000000000;""
+366;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP12";"St Cyr sur mer - Bandol";"UO028";"St Cyr sur mer, La Madrague";"QTL";"St Cyr sur mer, la Madrague";01/01/2009 00:00:00,000000000;""
+367;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP12";"St Cyr sur mer - Bandol";"UO029";"Bandol";"ATL";"Bandol";01/01/2009 00:00:00,000000000;""
+368;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP13";"De St Elme à La Seyne-sur-Mer";"UO030";"St Elme";"LTL";"St Elme";01/01/2009 00:00:00,000000000;""
+369;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP13";"De St Elme à La Seyne-sur-Mer";"UO031";"St Mandrier sur mer";"STL";"St Mandrier sur mer";01/01/2009 00:00:00,000000000;""
+370;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP13";"De St Elme à La Seyne-sur-Mer";"UO032";"La Seyne-sur-mer";"DTL";"La Seyne-sur-Mer";01/01/2009 00:00:00,000000000;""
+371;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP14";"Toulon";"UO033";"Port St Louis du Mourillon";"TTL";"Port St Louis du Mourillon";01/01/2009 00:00:00,000000000;""
+372;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP14";"Toulon";"UO034";"Toulon";"XTL";"Toulon";01/01/2009 00:00:00,000000000;""
+373;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP14";"Toulon";"UO035";"Port des Oursinières";"VTL";"Port des Oursinières";01/01/2009 00:00:00,000000000;""
+374;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP15";"Hyères";"UO036";"Carqueiranne, les salettes";"ETL";"Carqueiranne, les salettes";01/01/2009 00:00:00,000000000;""
+375;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP15";"Hyères";"UO037";"Hyères, Ayguade-St Pierre sur mer - La Capte";"GTL";"Hyères, St Pierre sur mer";01/01/2009 00:00:00,000000000;""
+376;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP15";"Hyères";"UO038";"La Londe des Maures, Miramar";"5TL";"La Londe des Maures, Miramar";01/01/2009 00:00:00,000000000;""
+377;"PA";"Provence-Alpes-Côte d'Azur";"ZC05";"PACA-centre, de Marseille à Hyères";"SP15";"Hyères";"UO039";"Salins d'Hyères, Pothuau";"4TL";"Salins d'Hyères, Pothuau";01/01/2009 00:00:00,000000000;""
+378;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP16";"Sanary-sur-Mer - Le Brusc";"UO040";"Sanary-sur-Mer";"BTL";"Sanary-sur-Mer";01/01/2009 00:00:00,000000000;""
+379;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP16";"Sanary-sur-Mer - Le Brusc";"UO041";"Le Brusc - Port de la Coudoulière";"RTL";"Port de la Coudoulière";01/01/2009 00:00:00,000000000;""
+380;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP16";"Sanary-sur-Mer - Le Brusc";"UO041";"Le Brusc - Port de la Coudoulière";"CTL";"Le Brusc (Six-Fours-les-Plages)";01/01/2009 00:00:00,000000000;""
+381;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP17";"De Giens à Port-Cros";"UO042";"Giens, la Madrague";"ZTL";"Giens, la Madrague";01/01/2009 00:00:00,000000000;""
+382;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP17";"De Giens à Port-Cros";"UO043";"Giens, Port du Niel, de la tour fondue";"FTL";"Giens, Ports du Niel, de la Tour Fondue";01/01/2009 00:00:00,000000000;""
+383;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP17";"De Giens à Port-Cros";"UO044";"Port de Porquerolles (ile)";"2TL";"Port de Porquerolles (Ile de)";01/01/2009 00:00:00,000000000;""
+384;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP17";"De Giens à Port-Cros";"UO045";"Port-Cros (ile)";"6TL";"Port-Cros (Ile de)";01/01/2009 00:00:00,000000000;""
+385;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP18";"Le Lavandou";"UO046";"Le Lavandou - Port de Bormes les Mimosas";"MTL";"Port de Bormes les Mimosas, La Favière";01/01/2009 00:00:00,000000000;""
+386;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP18";"Le Lavandou";"UO046";"Le Lavandou - Port de Bormes les Mimosas";"HTL";"Le Lavandou";01/01/2009 00:00:00,000000000;""
+387;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP19";"Cavalaire sur Mer";"UO047";"Cavalaire sur Mer - Ramatuelle";"KTL";"Cavalaire sur Mer";01/01/2009 00:00:00,000000000;""
+388;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP20";"St-Tropez - Ste Maxime";"UO048";"Saint-Tropez, vieux port";"ITL";"Saint-Tropez, vieux port";01/01/2009 00:00:00,000000000;""
+389;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP20";"St-Tropez - Ste Maxime";"UO049";"Marines de Cogolin et Port Grimaud";"8TL";"Les Marines de Cogolin et Port Grimaud";01/01/2009 00:00:00,000000000;""
+390;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP20";"St-Tropez - Ste Maxime";"UO050";"Ste Maxime à St Aygulf";"NTL";"Ste Maxime";01/01/2009 00:00:00,000000000;""
+391;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP20";"St-Tropez - Ste Maxime";"UO050";"Ste Maxime à St Aygulf";"AT1";"Les Issambres, Port Ferréol";01/01/2009 00:00:00,000000000;""
+392;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP21";"Fréjus, St Raphaël";"UO051";"Fréjus";"PTL";"Fréjus";01/01/2009 00:00:00,000000000;""
+393;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP21";"Fréjus, St Raphaël";"UO052";"St-Raphaël";"JTL";"Saint-Raphaël, vieux port";01/01/2009 00:00:00,000000000;""
+394;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP21";"Fréjus, St Raphaël";"UO052";"St-Raphaël";"AT2";"Boulouris, le Toukan";01/01/2009 00:00:00,000000000;""
+395;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP21";"Fréjus, St Raphaël";"UO052";"St-Raphaël";"AT3";"Drammont, la Poussai";01/01/2009 00:00:00,000000000;""
+396;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP21";"Fréjus, St Raphaël";"UO052";"St-Raphaël";"AT4";"Agay";01/01/2009 00:00:00,000000000;""
+397;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP22";"Cannes";"UO053";"La Figueirette";"JNI";"La Figueirette";01/01/2009 00:00:00,000000000;""
+398;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP22";"Cannes";"UO054";"Théoule - La Galère";"SNI";"La Galère";01/01/2009 00:00:00,000000000;""
+399;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP22";"Cannes";"UO054";"Théoule - La Galère";"GNI";"Théoule";01/01/2009 00:00:00,000000000;""
+400;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP22";"Cannes";"UO055";"La Rague";"HNI";"La Rague";01/01/2009 00:00:00,000000000;""
+401;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP22";"Cannes";"UO056";"La Napoule";"INI";"La Napoule";01/01/2009 00:00:00,000000000;""
+402;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP22";"Cannes";"UO057";"Cannes, vieux port";"ANI";"Cannes, vieux port";01/01/2009 00:00:00,000000000;""
+403;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP22";"Cannes";"UO058";"Cannes, Nourée rouge";"KNI";"Cannes, Nourée Rouge";01/01/2009 00:00:00,000000000;""
+404;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP23";"Antibes";"UO059";"Golfe Juan - Juan les pins";"BNI";"Golfe Juan (Vallauris)";01/01/2009 00:00:00,000000000;""
+405;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP23";"Antibes";"UO060";"Port de Crouton - antibes";"PNI";"Port de Crouton";01/01/2009 00:00:00,000000000;""
+406;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP23";"Antibes";"UO061";"Port de Salis - antibes";"QNI";"Port de Salis";01/01/2009 00:00:00,000000000;""
+407;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP23";"Antibes";"UO062";"Port Vauban - antibes";"RNI";"Port Vauban";01/01/2009 00:00:00,000000000;""
+408;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP24";"Nice";"UO063";"Villeneuve Loubet";"1NI";"Villeneuve Loubet";01/01/2009 00:00:00,000000000;""
+409;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP24";"Nice";"UO064";"Cros de Cagnes - St Laurent du Var";"2NI";"Cros de Cagnes";01/01/2009 00:00:00,000000000;""
+410;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP24";"Nice";"UO065";"Nice";"XNI";"Nice";01/01/2009 00:00:00,000000000;""
+411;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP25";"De Villefranche à Baulieu";"UO066";"Villefranche, tous les ports";"VNI";"Villefranche, Port de la Darse";01/01/2009 00:00:00,000000000;""
+412;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP25";"De Villefranche à Baulieu";"UO066";"Villefranche, tous les ports";"3NI";"Villefranche, Port de la Santé";01/01/2009 00:00:00,000000000;""
+413;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP25";"De Villefranche à Baulieu";"UO066";"Villefranche, tous les ports";"DNI";"Villefranche-sur-Mer, tous les ports";01/01/2009 00:00:00,000000000;""
+414;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP25";"De Villefranche à Baulieu";"UO067";"St Jean Cap Ferrat";"UNI";"St Jean Cap Ferrat";01/01/2009 00:00:00,000000000;""
+415;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP25";"De Villefranche à Baulieu";"UO068";"Baulieu - Cap d'Ail";"TNI";"Baulieu";01/01/2009 00:00:00,000000000;""
+416;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP26";"Monaco - Menton";"UO069";"Monaco";"5NI";"Monaco, autres ports";01/01/2009 00:00:00,000000000;""
+417;"PA";"Provence-Alpes-Côte d'Azur";"ZC06";"PACA-est, de Sanary à Menton";"SP26";"Monaco - Menton";"UO070";"Menton, vieux port, Garavan";"ENI";"Menton, vieux port, Garavan";01/01/2009 00:00:00,000000000;""
+1;"RU";"Réunion";"ZC01";"Secteur Est";"SP01";"Côte Est";"UO001";"La Possession_Le Port";"ARU";"La Possession";01/01/2009 00:00:00,000000000;""
+2;"RU";"Réunion";"ZC01";"Secteur Est";"SP01";"Côte Est";"UO001";"La Possession_Le Port";"XRU";"Le Port";01/01/2009 00:00:00,000000000;""
+3;"RU";"Réunion";"ZC01";"Secteur Est";"SP01";"Côte Est";"UO002";"Saint Paul";"BRU";"Saint Paul";01/01/2009 00:00:00,000000000;""
+4;"RU";"Réunion";"ZC01";"Secteur Est";"SP01";"Côte Est";"UO003";"Saint Gilles";"CRU";"Saint Gilles";01/01/2009 00:00:00,000000000;""
+5;"RU";"Réunion";"ZC01";"Secteur Est";"SP01";"Côte Est";"UO004";"Saint André";"LRU";"Saint André";01/01/2009 00:00:00,000000000;""
+6;"RU";"Réunion";"ZC01";"Secteur Est";"SP01";"Côte Est";"UO005";"Sainte Marie_Saint Denis";"MRU";"Sainte Marie";01/01/2009 00:00:00,000000000;""
+7;"RU";"Réunion";"ZC01";"Secteur Est";"SP01";"Côte Est";"UO005";"Sainte Marie_Saint Denis";"NRU";"Saint Denis";01/01/2009 00:00:00,000000000;""
+8;"RU";"Réunion";"ZC01";"Secteur Est";"SP01";"Côte Est";"UO006";"Saint Benoît";"KRU";"Saint Benoît";01/01/2009 00:00:00,000000000;""
+9;"RU";"Réunion";"ZC02";"Secteur Ouest";"SP02";"Côte Ouest";"UO007";"Saint Leu";"DRU";"Saint Leu";01/01/2009 00:00:00,000000000;""
+10;"RU";"Réunion";"ZC02";"Secteur Ouest";"SP02";"Côte Ouest";"UO008";"Etang salé";"ERU";"Etang salé";01/01/2009 00:00:00,000000000;""
+11;"RU";"Réunion";"ZC02";"Secteur Ouest";"SP02";"Côte Ouest";"UO009";"Saint Pierre";"FRU";"Saint Pierre";01/01/2009 00:00:00,000000000;""
+12;"RU";"Réunion";"ZC02";"Secteur Ouest";"SP02";"Côte Ouest";"UO010";"Langevin";"GRU";"Langevin";01/01/2009 00:00:00,000000000;""
+13;"RU";"Réunion";"ZC02";"Secteur Ouest";"SP02";"Côte Ouest";"UO011";"Saint Philippe";"HRU";"Saint Philippe";01/01/2009 00:00:00,000000000;""
+14;"RU";"Réunion";"ZC02";"Secteur Ouest";"SP02";"Côte Ouest";"UO012";"Anse des cascades_Sainte Rose";"IRU";"Anse des cascades";01/01/2009 00:00:00,000000000;""
+15;"RU";"Réunion";"ZC02";"Secteur Ouest";"SP02";"Côte Ouest";"UO012";"Anse des cascades_Sainte Rose";"JRU";"Sainte Rose";01/01/2009 00:00:00,000000000;""
+16;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO001";"POINTE A PITRE";"AP1";"PP-Lauricisque";01/01/2009 00:00:00,000000000;""
+17;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO001";"POINTE A PITRE";"AP2";"PP-Bergevin";01/01/2009 00:00:00,000000000;""
+18;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO001";"POINTE A PITRE";"AP3";"PP-LaDarse";01/01/2009 00:00:00,000000000;""
+19;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO001";"POINTE A PITRE";"AP4";"PP-Carenage";01/01/2009 00:00:00,000000000;""
+20;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO001";"POINTE A PITRE";"AP5";"PP-Marina Pointe-A Pitre";01/01/2009 00:00:00,000000000;""
+21;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO001";"POINTE A PITRE";"XPP";"PP-Pointe-à-Pitre";01/01/2009 00:00:00,000000000;""
+22;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO002";"LE GOSIER";"BP1";"GO- La grande baie (Le Gosier)";01/01/2009 00:00:00,000000000;""
+23;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO002";"LE GOSIER";"BP2";"GO-Le Gosier Bourg";01/01/2009 00:00:00,000000000;""
+24;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO002";"LE GOSIER";"BP3";"GO-Anse du Mont";01/01/2009 00:00:00,000000000;""
+25;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO002";"LE GOSIER";"BP4";"GO-Petit Havre";01/01/2009 00:00:00,000000000;""
+26;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO002";"LE GOSIER";"BP5";"GO-Anse canot";01/01/2009 00:00:00,000000000;""
+27;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"CP1";"SA-FF Sainte Anne (Bourg)";01/01/2009 00:00:00,000000000;""
+28;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"CP2";"SA-Sainte Anne plage municipale";01/01/2009 00:00:00,000000000;""
+29;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"CP3";"SA-Castaing";01/01/2009 00:00:00,000000000;""
+30;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"CP4";"SA-Plage de bois Jolan";01/01/2009 00:00:00,000000000;""
+31;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"CP5";"SA-Les Galbas";01/01/2009 00:00:00,000000000;""
+32;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"DP1";"FR-Anse à la barque";01/01/2009 00:00:00,000000000;""
+33;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"DP2";"FR-Saint François (Bourg)";01/01/2009 00:00:00,000000000;""
+34;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"DP3";"FR- Entre port de pêche et plaisance";01/01/2009 00:00:00,000000000;""
+35;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"DP4";"FR-Marina de St François";01/01/2009 00:00:00,000000000;""
+36;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"DP5";"FR-Anse du mancenillier";01/01/2009 00:00:00,000000000;""
+37;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO003";"ST FRANCOIS_SAINTE ANNE";"DP6";"FR-Anse kahouane";01/01/2009 00:00:00,000000000;""
+38;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO004";"LE MOULE";"EP1";"MO-L'autre bord";01/01/2009 00:00:00,000000000;""
+39;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO004";"LE MOULE";"EP2";"MO-Rivière d'Audoin";01/01/2009 00:00:00,000000000;""
+40;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO004";"LE MOULE";"EP3";"MO-Le moule";01/01/2009 00:00:00,000000000;""
+41;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO004";"LE MOULE";"EP4";"MO-Baie du nord ouest";01/01/2009 00:00:00,000000000;""
+42;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO005";"ANSE BERTRAND_PORT LOUIS_PETIT CANAL_MORNE A L'EAU";"FP1";"AB-Anse Bertrand";01/01/2009 00:00:00,000000000;""
+43;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO005";"ANSE BERTRAND_PORT LOUIS_PETIT CANAL_MORNE A L'EAU";"FP2";"PL-Port Louis";01/01/2009 00:00:00,000000000;""
+44;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO005";"ANSE BERTRAND_PORT LOUIS_PETIT CANAL_MORNE A L'EAU";"GP1";"PC-Petit canal - la Darse";01/01/2009 00:00:00,000000000;""
+45;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO005";"ANSE BERTRAND_PORT LOUIS_PETIT CANAL_MORNE A L'EAU";"HP1";"MN-Canal des Rotours";01/01/2009 00:00:00,000000000;""
+46;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO005";"ANSE BERTRAND_PORT LOUIS_PETIT CANAL_MORNE A L'EAU";"HP2";"MN-(Vieux bourg ) Morne à l'eau";01/01/2009 00:00:00,000000000;""
+47;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO005";"ANSE BERTRAND_PORT LOUIS_PETIT CANAL_MORNE A L'EAU";"HP3";"MN-Anse Babin";01/01/2009 00:00:00,000000000;""
+48;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO005";"ANSE BERTRAND_PORT LOUIS_PETIT CANAL_MORNE A L'EAU";"HP4";"MN-Canal Perrin";01/01/2009 00:00:00,000000000;""
+49;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO011";"LA DESIRADE";"3P1";"DE-Anse des Galets";01/01/2009 00:00:00,000000000;""
+50;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO011";"LA DESIRADE";"3P2";"DE-Les Sables";01/01/2009 00:00:00,000000000;""
+51;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO011";"LA DESIRADE";"3P3";"DE-Beausejour";01/01/2009 00:00:00,000000000;""
+52;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO011";"LA DESIRADE";"3P4";"DE-Desert";01/01/2009 00:00:00,000000000;""
+53;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO011";"LA DESIRADE";"3P5";"DE-Le Souffleur";01/01/2009 00:00:00,000000000;""
+54;"GA";"Guadeloupe";"ZC01";"Nord Guadeloupe";"SP01";"Grande Terre et dépendances";"UO011";"LA DESIRADE";"3P6";"DE-Baie Mahault";01/01/2009 00:00:00,000000000;""
+55;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"IP1";"BM-Gabarre cote la jaille";01/01/2009 00:00:00,000000000;""
+56;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"IP2";"BM-Baie Mahault (débarcadère)";01/01/2009 00:00:00,000000000;""
+57;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"IP3";"BM-Baie Mahault (face ANPE)";01/01/2009 00:00:00,000000000;""
+58;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"IP4";"BM-Baie Dupuy";01/01/2009 00:00:00,000000000;""
+59;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"IP5";"BM-Moudong";01/01/2009 00:00:00,000000000;""
+60;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"IP6";"BM-Anse de la Chapelle";01/01/2009 00:00:00,000000000;""
+61;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"JP1";"LM-Blachon";01/01/2009 00:00:00,000000000;""
+62;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"KP1";"SR-Morne rouge";01/01/2009 00:00:00,000000000;""
+63;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"KP2";"SR-Viard";01/01/2009 00:00:00,000000000;""
+64;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"KP3";"SR-Sainte Rose (bourg)";01/01/2009 00:00:00,000000000;""
+65;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"KP4";"SR-Madame";01/01/2009 00:00:00,000000000;""
+66;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"KP5";"SR-Vinty";01/01/2009 00:00:00,000000000;""
+67;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO006";"BAIE-MAHAULT_LAMENTIN_SAINTE ROSE";"KP6";"SR-Clugny";01/01/2009 00:00:00,000000000;""
+68;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO007";"DESHAIES_POINTE NOIRE";"LP1";"DH-Anse Rifflet";01/01/2009 00:00:00,000000000;""
+69;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO007";"DESHAIES_POINTE NOIRE";"LP2";"DH-Grande anse de Deshaies";01/01/2009 00:00:00,000000000;""
+70;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO007";"DESHAIES_POINTE NOIRE";"LP3";"DH-Deshaies (bourg)";01/01/2009 00:00:00,000000000;""
+71;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO007";"DESHAIES_POINTE NOIRE";"LP4";"DH-Anse Ferry";01/01/2009 00:00:00,000000000;""
+72;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO007";"DESHAIES_POINTE NOIRE";"MP1";"PN-Petite Anse (Pointe noire)";01/01/2009 00:00:00,000000000;""
+73;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO007";"DESHAIES_POINTE NOIRE";"MP2";"PN- Baille Argent (Pointe noire)";01/01/2009 00:00:00,000000000;""
+74;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO007";"DESHAIES_POINTE NOIRE";"MP3";"PN-Anse Marigo";01/01/2009 00:00:00,000000000;""
+75;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO007";"DESHAIES_POINTE NOIRE";"MP4";"PN-Pointe noire (Bourg)";01/01/2009 00:00:00,000000000;""
+76;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO007";"DESHAIES_POINTE NOIRE";"MP5";"PN-Anse Guyonneau";01/01/2009 00:00:00,000000000;""
+77;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO007";"DESHAIES_POINTE NOIRE";"MP6";"PN-Plage caraïbe";01/01/2009 00:00:00,000000000;""
+78;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NP1";"BO-Anse Colas Mahault";01/01/2009 00:00:00,000000000;""
+79;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NP2";"BO-Malendure";01/01/2009 00:00:00,000000000;""
+80;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NP3";"BO-Anse à Galets";01/01/2009 00:00:00,000000000;""
+81;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NP4";"BO-Pigeon section la lise";01/01/2009 00:00:00,000000000;""
+82;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NP5";"BO-Pigeon section fromager";01/01/2009 00:00:00,000000000;""
+83;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NP6";"BO-Pigeon section coton";01/01/2009 00:00:00,000000000;""
+84;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NP7";"BO-Anse à sable";01/01/2009 00:00:00,000000000;""
+85;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NP8";"BO-Bouillante station thermale-Anse Marsolle";01/01/2009 00:00:00,000000000;""
+86;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NP9";"BO-Anse de Bouillante";01/01/2009 00:00:00,000000000;""
+87;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NPA";"BO-Pointe de l¿Ermitage";01/01/2009 00:00:00,000000000;""
+88;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NPB";"BO-Anse à Cardonnet";01/01/2009 00:00:00,000000000;""
+89;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NPC";"BO-Anse à Thomas";01/01/2009 00:00:00,000000000;""
+90;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NPD";"BO-Anse du Dépôt";01/01/2009 00:00:00,000000000;""
+91;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NPE";"BO-Grande anse Duche";01/01/2009 00:00:00,000000000;""
+92;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NPF";"BO-Trois Tortues";01/01/2009 00:00:00,000000000;""
+93;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"NPG";"BO-Anse à la Barque (Bouillante)";01/01/2009 00:00:00,000000000;""
+94;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"OP1";"VH-Anse à la Barque";01/01/2009 00:00:00,000000000;""
+95;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"OP2";"VH-Marigot";01/01/2009 00:00:00,000000000;""
+96;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"OP3";"VH-Vieux Habitants (Bourg)";01/01/2009 00:00:00,000000000;""
+97;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO008";"BOUILLANTE_VIEUX HABITANTS";"OP4";"VH-Anse du val de l'orge";01/01/2009 00:00:00,000000000;""
+98;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"PP1";"BA-La Madeleine";01/01/2009 00:00:00,000000000;""
+99;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"PP2";"BA-Baillif Quai (Bourg)";01/01/2009 00:00:00,000000000;""
+100;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"PP3";"BA-Tour du père Labat";01/01/2009 00:00:00,000000000;""
+101;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"QP1";"BT-Rivière des pères";01/01/2009 00:00:00,000000000;""
+102;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"QP2";"BT-Basse terre (quai saintois)";01/01/2009 00:00:00,000000000;""
+103;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"RP1";"GY-Face IRPM";01/01/2009 00:00:00,000000000;""
+104;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"RP2";"GY-Marina de Rivière Sens";01/01/2009 00:00:00,000000000;""
+105;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"SP1";"VF-Pointe Mazarin";01/01/2009 00:00:00,000000000;""
+106;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"SP2";"VF-Anse Dupuy";01/01/2009 00:00:00,000000000;""
+107;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"SP3";"VF-Vieux fort";01/01/2009 00:00:00,000000000;""
+108;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"SP4";"VF-Pointe à Launay";01/01/2009 00:00:00,000000000;""
+109;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"TP1";"TR-Plage de la grande anse";01/01/2009 00:00:00,000000000;""
+110;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO009";"BAILLIF_BASSE TERRE_GOURBEYRE_VIEUX FORT_TROIS RIVIERES";"TP2";"TR-Bord de mer (Trois Rivières)";01/01/2009 00:00:00,000000000;""
+111;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"UP1";"CB-Anse salé";01/01/2009 00:00:00,000000000;""
+112;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"UP2";"CB-Anse du Bananier";01/01/2009 00:00:00,000000000;""
+113;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"UP3";"CB-Anse Saint Sauveur";01/01/2009 00:00:00,000000000;""
+114;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"UP4";"CB-Capesterre Belle Eau (Bourg)";01/01/2009 00:00:00,000000000;""
+115;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"UP5";"CB-Plage de roseau";01/01/2009 00:00:00,000000000;""
+116;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"UP6";"CB-Sainte Marie";01/01/2009 00:00:00,000000000;""
+117;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"UP7";"CB-Four à chaux";01/01/2009 00:00:00,000000000;""
+118;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"VP1";"GY-Sainte claire";01/01/2009 00:00:00,000000000;""
+119;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"VP2";"GY-Goyave (Bourg)";01/01/2009 00:00:00,000000000;""
+120;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"VP3";"GY-Sarcelle";01/01/2009 00:00:00,000000000;""
+121;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO010";"CAPESTERRE BELLE EAU_GOYAVE_PETIT BOURG";"WP1";"PB- Petit bourg - la Vinaigrerie";01/01/2009 00:00:00,000000000;""
+122;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO012";"GRAND BOURG_CAPESTERRE_ST LOUIS";"ZP1";"GB-Folle Anse";01/01/2009 00:00:00,000000000;""
+123;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO012";"GRAND BOURG_CAPESTERRE_ST LOUIS";"ZP2";"GB-Grand bourg de Marie Galante";01/01/2009 00:00:00,000000000;""
+124;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO012";"GRAND BOURG_CAPESTERRE_ST LOUIS";"ZP3";"GB-Plage de Murat";01/01/2009 00:00:00,000000000;""
+125;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO012";"GRAND BOURG_CAPESTERRE_ST LOUIS";"ZP4";"GB-Les Basses";01/01/2009 00:00:00,000000000;""
+126;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO012";"GRAND BOURG_CAPESTERRE_ST LOUIS";"1P1";"CP-Capesterre de Marie-Galante";01/01/2009 00:00:00,000000000;""
+127;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO012";"GRAND BOURG_CAPESTERRE_ST LOUIS";"2P1";"SL-Route du Vieux fort";01/01/2009 00:00:00,000000000;""
+128;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO012";"GRAND BOURG_CAPESTERRE_ST LOUIS";"2P2";"SL-Anse canot";01/01/2009 00:00:00,000000000;""
+129;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO012";"GRAND BOURG_CAPESTERRE_ST LOUIS";"2P3";"SL-Saint louis de Marie Galante";01/01/2009 00:00:00,000000000;""
+130;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO012";"GRAND BOURG_CAPESTERRE_ST LOUIS";"2P4";"SL-Plage du Bourg";01/01/2009 00:00:00,000000000;""
+131;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"XP1";"TH-Terre de Haut (Bourg)";01/01/2009 00:00:00,000000000;""
+132;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"XP2";"TH-Petite anse";01/01/2009 00:00:00,000000000;""
+133;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"XP3";"TH-Anse Fond cure";01/01/2009 00:00:00,000000000;""
+134;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"XP4";"TH-Anse Morel";01/01/2009 00:00:00,000000000;""
+135;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"XP5";"TH-Plage de Marigot";01/01/2009 00:00:00,000000000;""
+136;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"XP6";"TH-Anse Mire";01/01/2009 00:00:00,000000000;""
+137;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"YP1";"TB-Grande Anse";01/01/2009 00:00:00,000000000;""
+138;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"YP2";"TB-Anse a dos";01/01/2009 00:00:00,000000000;""
+139;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"YP3";"TB-Petite anse";01/01/2009 00:00:00,000000000;""
+140;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"YP4";"TB-Grande baie";01/01/2009 00:00:00,000000000;""
+141;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO013";"TERRE DE HAUT_TERRE DE BAS";"YP5";"TB-Anse des Muriers";01/01/2009 00:00:00,000000000;""
+142;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"4P1";"BH-Gustavia";01/01/2009 00:00:00,000000000;""
+143;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"4P2";"BH-Anse du grand cul de sac";01/01/2009 00:00:00,000000000;""
+144;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"4P3";"BH-Anse de Marigot";01/01/2009 00:00:00,000000000;""
+145;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"4P4";"BH-Anse de Lorient";01/01/2009 00:00:00,000000000;""
+146;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"4P5";"BH-Corosol";01/01/2009 00:00:00,000000000;""
+147;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"4P6";"BH-Baie de St Jean";01/01/2009 00:00:00,000000000;""
+148;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"5P1";"SM-Marigot (Marina Royale)";01/01/2009 00:00:00,000000000;""
+149;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"5P2";"SM-Sandy Ground";01/01/2009 00:00:00,000000000;""
+150;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"5P3";"SM-Quartier d¿Orléans";01/01/2009 00:00:00,000000000;""
+151;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"5P4";"SM-Baie Orientale";01/01/2009 00:00:00,000000000;""
+152;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"5P5";"SM-Cul de sac";01/01/2009 00:00:00,000000000;""
+153;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"5P6";"SM-Grand Case";01/01/2009 00:00:00,000000000;""
+154;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"5P7";"SM-St James";01/01/2009 00:00:00,000000000;""
+155;"GA";"Guadeloupe";"ZC02";"Sud Guadeloupe";"SP02";"Basse Terre et dépendances";"UO014";"SAINT BARTHELEMY_SAINT MARTIN";"5P8";"SM-Anse Marcel";01/01/2009 00:00:00,000000000;""
+156;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO026";"FF-Pointe des Nègres";"AF1";"FF-Pointe des Nègres";01/01/2009 00:00:00,000000000;""
+157;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO027";"FF-Canal Levassor, FF-Texaco, FF-Bas Lycée, SH-Fond Lahaye";"AF2";"FF-Texaco";01/01/2009 00:00:00,000000000;""
+159;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO027";"FF-Canal Levassor, FF-Texaco, FF-Bas Lycée, SH-Fond Lahaye";"AFA";"FF-Canal Levassor";01/01/2009 00:00:00,000000000;""
+160;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO027";"FF-Canal Levassor, FF-Texaco, FF-Bas Lycée, SH-Fond Lahaye";"XF2";"SH-Fond Lahaye";01/01/2009 00:00:00,000000000;""
+161;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO028";"DC-Canal Ducos, SL-Trois Rivières";"CF1";"DC-Canal Ducos";01/01/2009 00:00:00,000000000;""
+162;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO028";"DC-Canal Ducos, SL-Trois Rivières";"GF1";"SL-Trois Rivières";01/01/2009 00:00:00,000000000;""
+163;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO029";"FF-Canal Moreau";"AF4";"FF-Canal Moreau";01/01/2009 00:00:00,000000000;""
+164;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO030";"FF-Canal Alaric";"AF5";"FF-Canal Alaric";01/01/2009 00:00:00,000000000;""
+165;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO031";"FF-Volga Plage";"AF6";"FF-Volga Plage";01/01/2009 00:00:00,000000000;""
+166;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO032";"FF-Coco l'Echelle";"AF7";"FF-Coco l'Echelle";01/01/2009 00:00:00,000000000;""
+167;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO033";"FF-Etang Mancini";"AF8";"FF-Etang Mancini";01/01/2009 00:00:00,000000000;""
+168;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO034";"FF-Pointe des Grives";"AF9";"FF-Pointe des Grives";01/01/2009 00:00:00,000000000;""
+169;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO035";"AA-Anses d'Arlets (Bourg), AA-Grande Anse, AA-Petite Anse";"EF3";"AA-Grande Anse";01/01/2009 00:00:00,000000000;""
+170;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO035";"AA-Anses d'Arlets (Bourg), AA-Grande Anse, AA-Petite Anse";"EF4";"AA-Anses d'Arlets (Bourg)";01/01/2009 00:00:00,000000000;""
+171;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO035";"AA-Anses d'Arlets (Bourg), AA-Grande Anse, AA-Petite Anse";"EF5";"AA-Petite Anse";01/01/2009 00:00:00,000000000;""
+172;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO041";"LM-Californie";"BF1";"LM-Californie";01/01/2009 00:00:00,000000000;""
+173;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO042";"LM-Lamentin (Bourg)";"BF2";"LM-Lamentin (Bourg)";01/01/2009 00:00:00,000000000;""
+174;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO043";"LM-Morne Cabrit";"BF3";"LM-Morne Cabrit";01/01/2009 00:00:00,000000000;""
+175;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO044";"LM-Calebassier";"BF4";"LM-Calebassier";01/01/2009 00:00:00,000000000;""
+176;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO050";"DI-Taupinière, DI-La Cherry";"FF3";"DI-La Cherry";01/01/2009 00:00:00,000000000;""
+177;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO050";"DI-Taupinière, DI-La Cherry";"FF5";"DI-Taupinière";01/01/2009 00:00:00,000000000;""
+178;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO056";"TI-Magasin Zéline";"DF1";"TI-Magasin Zéline";01/01/2009 00:00:00,000000000;""
+179;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO057";"TI-Bord de Mer (Trois Ilets)";"DF2";"TI-Bord de Mer (Trois Ilets)";01/01/2009 00:00:00,000000000;""
+180;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO058";"TI-Pointe Galy";"DF3";"TI-Pointe Galy";01/01/2009 00:00:00,000000000;""
+181;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO059";"TI-Anse Mitan";"DF4";"TI-Anse Mitan";01/01/2009 00:00:00,000000000;""
+182;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO060";"TI-Anse Marette";"DF5";"TI-Anse Marette";01/01/2009 00:00:00,000000000;""
+183;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO061";"TI-Anse à l'Ane";"DF6";"TI-Anse à l'Ane";01/01/2009 00:00:00,000000000;""
+184;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO068";"AA-Anse Noire";"EF1";"AA-Anse Noire";01/01/2009 00:00:00,000000000;""
+185;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO069";"AA-Anse Dufour";"EF2";"AA-Anse Dufour";01/01/2009 00:00:00,000000000;""
+186;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO070";"RP-Poirier,SL-Sainte Luce (Bourg)";"GF3";"SL-Sainte Luce (Bourg)";01/01/2009 00:00:00,000000000;""
+187;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO070";"RP-Poirier,SL-Sainte Luce (Bourg)";"HF2";"RP-Poirier";01/01/2009 00:00:00,000000000;""
+188;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO071";"SA -Ste Anne (bourg), MR-Le Marin (bourg)";"IF2";"MR-Le Marin (bourg)";01/01/2009 00:00:00,000000000;""
+189;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO071";"SA -Ste Anne (bourg), MR-Le Marin (bourg)";"JF1";"SA -Ste Anne (bourg)";01/01/2009 00:00:00,000000000;""
+190;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO072";"SA-Cap Chevalier";"JF4";"SA-Cap Chevalier";01/01/2009 00:00:00,000000000;""
+191;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO077";"DI-Anse Cafard";"FF1";"DI-Anse Cafard";01/01/2009 00:00:00,000000000;""
+192;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO078";"DI-Diamant (Bourg)";"FF2";"DI-Diamant (Bourg)";01/01/2009 00:00:00,000000000;""
+193;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO079";"VC-Port du Vauclin";"KF4";"VC-Port du Vauclin";01/01/2009 00:00:00,000000000;""
+194;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO080";"DI-Marigot (Diamant)";"FF4";"DI-Marigot (Diamant)";01/01/2009 00:00:00,000000000;""
+195;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO081";"FR-Le François (bourg) - La jetée, FR-Le Simon, FR-Dostaly";"LF3";"FR-Le Simon";01/01/2009 00:00:00,000000000;""
+196;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO081";"FR-Le François (bourg) - La jetée, FR-Le Simon, FR-Dostaly";"LF4";"FR-Dostaly";01/01/2009 00:00:00,000000000;""
+197;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO081";"FR-Le François (bourg) - La jetée, FR-Le Simon, FR-Dostaly";"LFA";"FR-Le François (bourg) - La jetée";01/01/2009 00:00:00,000000000;""
+198;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO082";"DI-Pointe Giraud";"FF6";"DI-Pointe Giraud";01/01/2009 00:00:00,000000000;""
+199;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO085";"RB-Le Robert (bourg), RB-Pointe Fort";"MFC";"RB-Le Robert (bourg)";01/01/2009 00:00:00,000000000;""
+200;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO085";"RB-Le Robert (bourg), RB-Pointe Fort";"MFE";"RB-Pointe Fort";01/01/2009 00:00:00,000000000;""
+201;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO086";"SL-Corps de Garde";"GF2";"SL-Corps de Garde";01/01/2009 00:00:00,000000000;""
+202;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO087";"TR-Anse Cosmy, TR-La Crique, TR-Tartane";"NF5";"TR-Tartane";01/01/2009 00:00:00,000000000;""
+203;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO087";"TR-Anse Cosmy, TR-La Crique, TR-Tartane";"NF9";"TR-La Crique";01/01/2009 00:00:00,000000000;""
+204;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO087";"TR-Anse Cosmy, TR-La Crique, TR-Tartane";"NFA";"TR-Anse Cosmy";01/01/2009 00:00:00,000000000;""
+158;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO027";"FF-Canal Levassor, FF-Texaco, FF-Bas Lycée, SH-Fond Lahaye";"AF3";"FF-Bas Lycée";01/01/2009 00:00:00,000000000;""
+205;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO089";"RP-Rivière Pilote (Bourg)";"HF1";"RP-Rivière Pilote (Bourg)";01/01/2009 00:00:00,000000000;""
+206;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO090";"SM-Sainte Marie (Bourg), MG-Le Marigot";"OF4";"SM-Sainte Marie (Bourg)";01/01/2009 00:00:00,000000000;""
+207;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO090";"SM-Sainte Marie (Bourg), MG-Le Marigot";"PF1";"MG-Le Marigot";01/01/2009 00:00:00,000000000;""
+208;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO091";"RP-Anse Figuier";"HF3";"RP-Anse Figuier";01/01/2009 00:00:00,000000000;""
+209;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO096";"MR-La Duprey";"IF1";"MR-La Duprey";01/01/2009 00:00:00,000000000;""
+210;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO097";"GR-Grand rivière, BP-Basse Pointe";"QF1";"BP-Basse Pointe";01/01/2009 00:00:00,000000000;""
+211;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO097";"GR-Grand rivière, BP-Basse Pointe";"RF1";"GR-Grand rivière";01/01/2009 00:00:00,000000000;""
+212;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO098";"MR-Canal O'Neil";"IF3";"MR-Canal O'Neil";01/01/2009 00:00:00,000000000;""
+213;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO099";"MR-Cul de Sac Ferré (cap Marin)";"IF4";"MR-Cul de Sac Ferré (cap Marin)";01/01/2009 00:00:00,000000000;""
+214;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO106";"PR-Cimetière, PR-Les Abymes, SP-Bourg de Saint Pierre";"SF3";"PR-Les Abymes";01/01/2009 00:00:00,000000000;""
+215;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO106";"PR-Cimetière, PR-Les Abymes, SP-Bourg de Saint Pierre";"SF6";"PR-Cimetière";01/01/2009 00:00:00,000000000;""
+216;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO106";"PR-Cimetière, PR-Les Abymes, SP-Bourg de Saint Pierre";"TF4";"SP-Bourg de Saint Pierre";01/01/2009 00:00:00,000000000;""
+217;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO107";"SA -Anse Tonnoir";"JF2";"SA -Anse Tonnoir";01/01/2009 00:00:00,000000000;""
+218;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO108";"SA-Les Salines";"JF3";"SA-Les Salines";01/01/2009 00:00:00,000000000;""
+219;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO109";"CB-Carbet Nord, CB-Carbet Sud, BF-Bourg de Bellefontaine, CP-Bourg de Case Pilote";"UF1";"CB-Carbet Sud";01/01/2009 00:00:00,000000000;""
+220;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO109";"CB-Carbet Nord, CB-Carbet Sud, BF-Bourg de Bellefontaine, CP-Bourg de Case Pilote";"UF2";"CB-Carbet Nord";01/01/2009 00:00:00,000000000;""
+221;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO109";"CB-Carbet Nord, CB-Carbet Sud, BF-Bourg de Bellefontaine, CP-Bourg de Case Pilote";"VF2";"BF-Bourg de Bellefontaine";01/01/2009 00:00:00,000000000;""
+222;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO109";"CB-Carbet Nord, CB-Carbet Sud, BF-Bourg de Bellefontaine, CP-Bourg de Case Pilote";"WF1";"CP-Bourg de Case Pilote";01/01/2009 00:00:00,000000000;""
+223;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO110";"SA-Anse au Bois";"JF5";"SA-Anse au Bois";01/01/2009 00:00:00,000000000;""
+224;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO112";"VC-Paquemar";"KF1";"VC-Paquemar";01/01/2009 00:00:00,000000000;""
+225;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO113";"VC-Massy-Massy";"KF2";"VC-Massy-Massy";01/01/2009 00:00:00,000000000;""
+226;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO114";"VC-Pointe Faula";"KF3";"VC-Pointe Faula";01/01/2009 00:00:00,000000000;""
+227;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO116";"VC-Marché du Vauclin";"KF5";"VC-Marché du Vauclin";01/01/2009 00:00:00,000000000;""
+228;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO117";"VC-Château Paille";"KF6";"VC-Château Paille";01/01/2009 00:00:00,000000000;""
+229;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO118";"VC-Pointe Faraudière";"KF7";"VC-Pointe Faraudière";01/01/2009 00:00:00,000000000;""
+230;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO119";"VC-Baie des Mulets (sud)";"KF8";"VC-Baie des Mulets (sud)";01/01/2009 00:00:00,000000000;""
+231;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO120";"VC-Baie des Mulets (nord)";"KF9";"VC-Baie des Mulets (nord)";01/01/2009 00:00:00,000000000;""
+232;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO121";"VC-Pointe des Sables";"KFA";"VC-Pointe des Sables";01/01/2009 00:00:00,000000000;""
+233;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO122";"VC-Pointe Jacob (La Plaine)";"KFB";"VC-Pointe Jacob (La Plaine)";01/01/2009 00:00:00,000000000;""
+234;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO129";"FR-Cap Est";"LF1";"FR-Cap Est";01/01/2009 00:00:00,000000000;""
+235;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO130";"FR-Pointe Cerisier";"LF2";"FR-Pointe Cerisier";01/01/2009 00:00:00,000000000;""
+236;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO133";"FR-Frégate sud (Frégate)";"LF5";"FR-Frégate sud (Frégate)";01/01/2009 00:00:00,000000000;""
+237;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO134";"FR-Frégate nord (Monerot)";"LF6";"FR-Frégate nord (Monerot)";01/01/2009 00:00:00,000000000;""
+238;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO135";"FR-Ilets du François";"LF7";"FR-Ilets du François";01/01/2009 00:00:00,000000000;""
+239;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO136";"FR-Presqu'île";"LF8";"FR-Presqu'île";01/01/2009 00:00:00,000000000;""
+240;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO137";"FR-Club nautique";"LF9";"FR-Club nautique";01/01/2009 00:00:00,000000000;""
+241;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO139";"FR-Pointe Degras (sud)";"LFB";"FR-Pointe Degras (sud)";01/01/2009 00:00:00,000000000;""
+242;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO140";"FR-Pointe Degras (nord)";"LFC";"FR-Pointe Degras (nord)";01/01/2009 00:00:00,000000000;""
+243;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO141";"FR-Baie Thalémon";"LFD";"FR-Baie Thalémon";01/01/2009 00:00:00,000000000;""
+244;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO142";"FR-Pointe Thalémon (sud)";"LFE";"FR-Pointe Thalémon (sud)";01/01/2009 00:00:00,000000000;""
+245;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO143";"FR-Pointe Thalémon (nord)";"LFF";"FR-Pointe Thalémon (nord)";01/01/2009 00:00:00,000000000;""
+246;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO144";"FR-Grande Case";"LFG";"FR-Grande Case";01/01/2009 00:00:00,000000000;""
+247;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO145";"FR-Mansarde Rancée 2";"LFH";"FR-Mansarde Rancée 2";01/01/2009 00:00:00,000000000;""
+248;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO146";"FR-Mansarde Rancée 3";"LFI";"FR-Mansarde Rancée 3";01/01/2009 00:00:00,000000000;""
+249;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO147";"FR-Pointe La Rose (ouest)";"LFJ";"FR-Pointe La Rose (ouest)";01/01/2009 00:00:00,000000000;""
+250;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO152";"RB-Pointe La Rose (est)";"MF1";"RB-Pointe La Rose (est)";01/01/2009 00:00:00,000000000;""
+251;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO153";"RB-Pointe La Rose (nord)";"MF2";"RB-Pointe La Rose (nord)";01/01/2009 00:00:00,000000000;""
+252;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO154";"RB-Sable Blanc (est)";"MF3";"RB-Sable Blanc (est)";01/01/2009 00:00:00,000000000;""
+253;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO155";"RB-Sable Blanc (ouest)";"MF4";"RB-Sable Blanc (ouest)";01/01/2009 00:00:00,000000000;""
+254;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO156";"RB-Pointe Hyacinthe (est)";"MF5";"RB-Pointe Hyacinthe (est)";01/01/2009 00:00:00,000000000;""
+255;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO157";"RB-Pointe Hyacinthe (nord)";"MF6";"RB-Pointe Hyacinthe (nord)";01/01/2009 00:00:00,000000000;""
+256;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO158";"RB-Pointe Hyacinthe (ouest)";"MF7";"RB-Pointe Hyacinthe (ouest)";01/01/2009 00:00:00,000000000;""
+257;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO159";"RB-Pointe Royale";"MF8";"RB-Pointe Royale";01/01/2009 00:00:00,000000000;""
+258;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO160";"RB-Pont Dore";"MF9";"RB-Pont Dore";01/01/2009 00:00:00,000000000;""
+259;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO161";"RB-Four à Chaux";"MFA";"RB-Four à Chaux";01/01/2009 00:00:00,000000000;""
+260;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO162";"RB-Pontalery";"MFB";"RB-Pontalery";01/01/2009 00:00:00,000000000;""
+261;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO164";"RB-Pointe Lynch";"MFD";"RB-Pointe Lynch";01/01/2009 00:00:00,000000000;""
+262;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO166";"RB-Pointe l'Ecurie (est)";"MFF";"RB-Pointe l'Ecurie (est)";01/01/2009 00:00:00,000000000;""
+263;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO167";"RB-Pointe l'Ecurie (sud)";"MFG";"RB-Pointe l'Ecurie (sud)";01/01/2009 00:00:00,000000000;""
+264;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO168";"RB-Pointe Rouge (sud)";"MFH";"RB-Pointe Rouge (sud)";01/01/2009 00:00:00,000000000;""
+265;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO169";"RB-Pointe Rouge (nord)";"MFI";"RB-Pointe Rouge (nord)";01/01/2009 00:00:00,000000000;""
+266;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO170";"RB-Baie de Cayol";"MFJ";"RB-Baie de Cayol";01/01/2009 00:00:00,000000000;""
+267;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO171";"RB-Petit Galion-Pointe Jean Claude";"MFK";"RB-Petit Galion-Pointe Jean Claude";01/01/2009 00:00:00,000000000;""
+268;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO172";"RB-Ilets du Robert";"MFL";"RB-Ilets du Robert";01/01/2009 00:00:00,000000000;""
+269;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO179";"TR-Galion (Quartier Bac)";"NF1";"TR-Galion (Quartier Bac)";01/01/2009 00:00:00,000000000;""
+270;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO180";"TR-Anse Dijon";"NF2";"TR-Anse Dijon";01/01/2009 00:00:00,000000000;""
+271;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO181";"TR-Anse Belune";"NF3";"TR-Anse Belune";01/01/2009 00:00:00,000000000;""
+272;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO182";"TR-Spoutourne";"NF4";"TR-Spoutourne";01/01/2009 00:00:00,000000000;""
+273;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO184";"TR-Ecole maritime (Autre Bord)";"NF6";"TR-Ecole maritime (Autre Bord)";01/01/2009 00:00:00,000000000;""
+274;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO185";"TR-Les Raisiniers";"NF7";"TR-Les Raisiniers";01/01/2009 00:00:00,000000000;""
+275;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO186";"TR-Petit Brésil";"NF8";"TR-Petit Brésil";01/01/2009 00:00:00,000000000;""
+276;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO205";"SM-Luciole";"OF1";"SM-Luciole";01/01/2009 00:00:00,000000000;""
+277;"MA";"Martinique";"ZC01";"Martinique";"SP01";"Martinique";"UO206";"SM-Derrière Morne";"OF2";"SM-Derrière Morne";01/01/2009 00:00:00,000000000;""
1
0
[Suiviobsmer-commits] r1045 - in trunk/wao-business/src: main/java/fr/ifremer/wao/io/csv2 main/java/fr/ifremer/wao/io/csv2/models main/java/fr/ifremer/wao/service main/resources/i18n main/xmi test/java/fr/ifremer/wao/io/csv2
by bleny@users.labs.libre-entreprise.org 28 Feb '11
by bleny@users.labs.libre-entreprise.org 28 Feb '11
28 Feb '11
Author: bleny
Date: 2011-02-28 10:32:35 +0000 (Mon, 28 Feb 2011)
New Revision: 1045
Log:
refactor csv Import for terrestrial divisions
Added:
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Common.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialDivisionImportModel.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialLocationImportModel.java
Removed:
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/SamplingPlanImportModel.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/TerrestrialLocationImportModel.java
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueSetter.java
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.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/io/csv2/ImportTest.java
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Common.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Common.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Common.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -0,0 +1,30 @@
+package fr.ifremer.wao.io.csv2;
+
+import org.apache.commons.beanutils.BeanUtils;
+
+public class Common {
+
+ public static class StringValueParser implements ValueParser<String> {
+ @Override
+ public String parse(String value) {
+ return value;
+ }
+ }
+
+ public static final ValueParser<String> STRING_VALUE_PARSER = new StringValueParser();
+
+ public static class BeanProperty<E, T> implements ValueSetter<E, T> {
+
+ protected String propertyName;
+
+ BeanProperty(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ @Override
+ public void set(E bean, T value) throws Exception {
+ BeanUtils.setProperty(bean, propertyName, value);
+ }
+ }
+
+}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java 2011-02-24 13:10:51 UTC (rev 1044)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -220,7 +220,7 @@
protected void readFirstLine() {
try {
- boolean emptyFile = ! reader.readRecord();
+ boolean emptyFile = ! reader.readRecord();
if (emptyFile) {
throw new IllegalArgumentException("CSV file has no line");
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java 2011-02-24 13:10:51 UTC (rev 1044)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -29,5 +29,5 @@
T parseValue(String value);
- void setValue(E object, T value);
+ void setValue(E object, T value) throws Exception;
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java 2011-02-24 13:10:51 UTC (rev 1044)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -20,6 +20,8 @@
*/
package fr.ifremer.wao.io.csv2;
+import org.apache.commons.beanutils.BeanUtils;
+
public class ImportableColumnImpl<E, T> implements ImportableColumn<E, T> {
protected String headerName;
@@ -32,19 +34,42 @@
protected ValueSetter<E, T> valueSetter;
+ protected ImportableColumnImpl() {}
+
/** a new <strong>ignored</strong> header */
- public ImportableColumnImpl(String headerName) {
- this.headerName = headerName;
- ignored = true;
+ public static <E,T> ImportableColumnImpl<E, T> newIgnoredColumn(String headerName) {
+ ImportableColumnImpl<E, T> newColumn = new ImportableColumnImpl();
+ newColumn.headerName = headerName;
+ newColumn.ignored = true;
+ return newColumn;
}
/** a new <strong>mandatory</strong> header */
- public ImportableColumnImpl(String headerName, ValueParser<T> valueParser, ValueSetter<E, T> valueSetter) {
+ public static <E> ImportableColumnImpl<E, String> newMandatoryColumn(String headerName, String propertyName) {
+ return newMandatoryColumn(headerName, Common.STRING_VALUE_PARSER, propertyName);
+ }
+
+ public static <E, T> ImportableColumnImpl<E, T> newMandatoryColumn(String headerName, ValueParser<T> valueParser, String propertyName) {
+ return newMandatoryColumn(headerName, valueParser, new Common.BeanProperty<E, T>(propertyName));
+ }
+
+ public static <E> ImportableColumnImpl<E, String> newMandatoryColumn(String headerName, ValueSetter<E, String> valueSetter) {
+ return newMandatoryColumn(headerName, Common.STRING_VALUE_PARSER, valueSetter);
+ }
+
+ public static <E,T> ImportableColumnImpl<E, T> newMandatoryColumn(String headerName, ValueParser<T> valueParser, ValueSetter<E, T> valueSetter) {
+ ImportableColumnImpl<E, T> newColumn = new ImportableColumnImpl(headerName, valueParser, valueSetter, false);
+ return newColumn;
+ }
+
+ public ImportableColumnImpl(String headerName, ValueParser<T> valueParser, ValueSetter<E, T> valueSetter, boolean ignored) {
this.headerName = headerName;
this.valueParser = valueParser;
this.valueSetter = valueSetter;
+ this.ignored = ignored;
}
+
@Override
public String getHeaderName() {
return headerName;
@@ -70,7 +95,7 @@
}
@Override
- public void setValue(E object, T value) {
+ public void setValue(E object, T value) throws Exception {
if ( ! isIgnored()) {
if (valueSetter == null) {
throw new UnsupportedOperationException("no setter provided");
Deleted: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/SamplingPlanImportModel.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/SamplingPlanImportModel.java 2011-02-24 13:10:51 UTC (rev 1044)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/SamplingPlanImportModel.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -1,63 +0,0 @@
-/*
- * #%L
- * Wao :: Business
- * %%
- * 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.io.csv2;
-
-import fr.ifremer.wao.bean.ObsProgram;
-import fr.ifremer.wao.entity.SampleRow;
-import fr.ifremer.wao.entity.SampleRowImpl;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-public class SamplingPlanImportModel implements ImportModel<SampleRow> {
-
- protected ObsProgram obsProgram;
-
- public SamplingPlanImportModel(ObsProgram obsProgram) {
- this.obsProgram = obsProgram;
- }
-
- @Override
- public void pushCsvHeaderNames(List<String> headerNames) {
- // discover months
- }
-
- @Override
- public SampleRow newEmptyInstance() {
- SampleRow newSampleRow = new SampleRowImpl();
- newSampleRow.setObsProgram(obsProgram);
- return newSampleRow;
- }
-
- @Override
- public Collection<ImportableColumn> getAllColumns() {
-
- if (obsProgram == ObsProgram.OBSMER) {
- // add obsMer-only field
- }
- if (obsProgram == ObsProgram.OBSVENTE) {
- // add obsVente-only field
- }
-
- throw new UnsupportedOperationException("not yet implemented");
- }
-}
Deleted: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/TerrestrialLocationImportModel.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/TerrestrialLocationImportModel.java 2011-02-24 13:10:51 UTC (rev 1044)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/TerrestrialLocationImportModel.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -1,208 +0,0 @@
-/*
- * #%L
- * Wao :: Business
- * %%
- * 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.io.csv2;
-
-import fr.ifremer.wao.bean.LocationType;
-import fr.ifremer.wao.entity.TerrestrialLocation;
-import fr.ifremer.wao.entity.TerrestrialLocationImpl;
-import org.apache.commons.lang.StringUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class TerrestrialLocationImportModel implements ImportModel<TerrestrialLocation> {
-
- protected List<ImportableColumn> allHeaders;
-
- @Override
- public void pushCsvHeaderNames(List<String> headerNames) {
- // nothing to do
- }
-
- @Override
- public TerrestrialLocation newEmptyInstance() {
- return new TerrestrialLocationImpl();
- }
-
- static class StringValueParser implements ValueParser<String> {
- @Override
- public String parse(String value) {
- return value;
- }
- }
-
- protected StringValueParser stringValueParser = new StringValueParser();
-
- protected String getCode(String value) {
- String code = null;
- if (StringUtils.isNotBlank(value)) {
- int firstSpaceIndex = value.indexOf(" ");
- code = value.substring(0, firstSpaceIndex);
- }
- return code;
- }
-
- protected String getName(String value) {
- String name = null;
- if (StringUtils.isNotBlank(value)) {
- int firstSpaceIndex = value.indexOf(" ");
- name = value.substring(firstSpaceIndex + 1, value.length());
- }
- return name;
- }
-
- public TerrestrialLocationImportModel() {
-
- allHeaders = new ArrayList<ImportableColumn>();
-
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, LocationType>("TLIEU_COD",
- new ValueParser<LocationType>() {
- @Override
- public LocationType parse(String value) {
- if ("6".equals(value)) {
- return LocationType.PORT;
- } else if ("7".equals(value)) {
- return LocationType.AUCTION;
- }
- throw new IllegalArgumentException(value + " is not a good location code");
- }
- },
- new ValueSetter<TerrestrialLocation, LocationType>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, LocationType value) {
- terrestrialLocation.setLocationType(value);
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("TLIEU_LIB"));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("LIEU_COD", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setCode(value);
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("LIEU_LIB", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setName(value);
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Port", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setPortCode(getCode(value));
- terrestrialLocation.setPortName(getName(value));
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Quartier maritime", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setDistrictCode(getCode(value));
- terrestrialLocation.setDistrictName(getName(value));
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Département INSEE", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setDepartmentCode(getCode(value));
- terrestrialLocation.setDepartmentName(getName(value));
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Sous-région IFREMER", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setSubRegionIfremerCode(getCode(value));
- terrestrialLocation.setSubRegionIfremerName(getName(value));
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Région Ifremer", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setRegionIfremerCode(getCode(value));
- terrestrialLocation.setRegionIfremerName(getName(value));
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Région INSEE", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setRegionCode(getCode(value));
- terrestrialLocation.setRegionName(getName(value));
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Façade maritime", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setSeaboardCode(getCode(value));
- terrestrialLocation.setSeaboardName(getName(value));
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Type de Région", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setRegionTypeCode(getCode(value));
- terrestrialLocation.setRegionTypeName(getName(value));
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Littoral FAO", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setCoastFAOCode(getCode(value));
- terrestrialLocation.setCoastFAOName(getName(value));
- }
- }
- ));
- allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("PAYS", stringValueParser,
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setCountryCode(getCode(value));
- terrestrialLocation.setCountryName(getName(value));
- }
- }
- ));
- }
-
- @Override
- public List<ImportableColumn> getAllColumns() {
- return allHeaders;
- }
-}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueSetter.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueSetter.java 2011-02-24 13:10:51 UTC (rev 1044)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueSetter.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -22,6 +22,6 @@
public interface ValueSetter<E, T> {
- void set(E object, T value);
+ void set(E object, T value) throws Exception;
}
Copied: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java (from rev 1044, trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/SamplingPlanImportModel.java)
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -0,0 +1,64 @@
+/*
+ * #%L
+ * Wao :: Business
+ * %%
+ * 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.io.csv2.models;
+
+import fr.ifremer.wao.bean.ObsProgram;
+import fr.ifremer.wao.entity.SampleRow;
+import fr.ifremer.wao.entity.SampleRowImpl;
+import fr.ifremer.wao.io.csv2.ImportModel;
+import fr.ifremer.wao.io.csv2.ImportableColumn;
+
+import java.util.Collection;
+import java.util.List;
+
+public class SamplingPlanImportModel implements ImportModel<SampleRow> {
+
+ protected ObsProgram obsProgram;
+
+ public SamplingPlanImportModel(ObsProgram obsProgram) {
+ this.obsProgram = obsProgram;
+ }
+
+ @Override
+ public void pushCsvHeaderNames(List<String> headerNames) {
+ // discover months
+ }
+
+ @Override
+ public SampleRow newEmptyInstance() {
+ SampleRow newSampleRow = new SampleRowImpl();
+ newSampleRow.setObsProgram(obsProgram);
+ return newSampleRow;
+ }
+
+ @Override
+ public Collection<ImportableColumn> getAllColumns() {
+
+ if (obsProgram == ObsProgram.OBSMER) {
+ // add obsMer-only field
+ }
+ if (obsProgram == ObsProgram.OBSVENTE) {
+ // add obsVente-only field
+ }
+
+ throw new UnsupportedOperationException("not yet implemented");
+ }
+}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialDivisionImportModel.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialDivisionImportModel.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialDivisionImportModel.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -0,0 +1,91 @@
+package fr.ifremer.wao.io.csv2.models;
+
+import fr.ifremer.wao.entity.TerrestrialDivision;
+import fr.ifremer.wao.entity.TerrestrialDivisionImpl;
+import fr.ifremer.wao.entity.TerrestrialLocation;
+import fr.ifremer.wao.io.csv2.ImportModel;
+import fr.ifremer.wao.io.csv2.ImportableColumn;
+import fr.ifremer.wao.io.csv2.ImportableColumnImpl;
+import fr.ifremer.wao.io.csv2.ValueParser;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class TerrestrialDivisionImportModel implements ImportModel<TerrestrialDivision> {
+
+ /** Existing ports
+ * key should be an terrestrial location id {@link fr.ifremer.wao.entity.TerrestrialLocation#getCode()}
+ * and all the values must have {@link fr.ifremer.wao.entity.TerrestrialLocation#getLocationType()} at
+ * {@link fr.ifremer.wao.bean.LocationType#PORT}.
+ */
+ protected Map<String, TerrestrialLocation> ports;
+
+ /** all valid {@link fr.ifremer.wao.entity.TerrestrialLocation#getRegionIfremerCode()} values.
+ * for validation purpose only */
+ protected Set<String> regionCodes;
+
+ public TerrestrialDivisionImportModel(Map<String, TerrestrialLocation> ports, Set<String> regionCodes) {
+ this.ports = ports;
+ this.regionCodes = regionCodes;
+ }
+
+ @Override
+ public void pushCsvHeaderNames(List<String> headerNames) {
+ // nothing to do
+ }
+
+ @Override
+ public TerrestrialDivision newEmptyInstance() {
+ return new TerrestrialDivisionImpl();
+ }
+
+ @Override
+ public Collection<ImportableColumn> getAllColumns() {
+ List<ImportableColumn> columns = new ArrayList<ImportableColumn>();
+
+ columns.add(ImportableColumnImpl.newMandatoryColumn("ID_STRATE", TerrestrialDivision.PROPERTY_CODE));
+ // add validation while parsing
+ columns.add(ImportableColumnImpl.newMandatoryColumn(
+ "REGION_IFREMER_COD",
+ // just validate the region code
+ new ValueParser<String>() {
+ @Override
+ public String parse(String regionCode) {
+ if (regionCodes.contains(regionCode)) {
+ throw new IllegalArgumentException("Le code '" + regionCode + "' n'est pas un code de région valide");
+ }
+ return regionCode;
+ }
+ },
+ TerrestrialDivision.PROPERTY_REGION_IFREMER_CODE));
+ columns.add(ImportableColumnImpl.newIgnoredColumn("REGION_IFREMER_LIB"));
+ columns.add(ImportableColumnImpl.newMandatoryColumn("ZONE_COMPETENCE_COD", TerrestrialDivision.PROPERTY_SKILL_ZONE_CODE));
+ columns.add(ImportableColumnImpl.newMandatoryColumn("ZONE_COMPETENCE_LIB", TerrestrialDivision.PROPERTY_SKILL_ZONE_NAME));
+ columns.add(ImportableColumnImpl.newMandatoryColumn("SOUS_POPULATION_COD", TerrestrialDivision.PROPERTY_SUB_POPULATION_CODE));
+ columns.add(ImportableColumnImpl.newMandatoryColumn("SOUS_POPULATION_LIB", TerrestrialDivision.PROPERTY_SUB_POPULATION_NAME));
+ columns.add(ImportableColumnImpl.newMandatoryColumn("UNITE_OBSERVATION_COD", TerrestrialDivision.PROPERTY_OBSERVATION_UNIT_CODE));
+ columns.add(ImportableColumnImpl.newMandatoryColumn("UNITE_OBSERVATION_LIB", TerrestrialDivision.PROPERTY_OBSERVATION_UNIT_NAME));
+ columns.add(ImportableColumnImpl.newMandatoryColumn(
+ "LIEU_OBSERVATION_COD",
+ // the value given is a code of a port, let's find and associate
+ new ValueParser<TerrestrialLocation>() {
+ @Override
+ public TerrestrialLocation parse(String locationCode) {
+ TerrestrialLocation port = ports.get(locationCode);
+ if (port == null) {
+ throw new IllegalArgumentException("Le code '" + locationCode + "' n'est pas un code de lieu valide");
+ }
+ return port;
+ }
+ },
+ TerrestrialDivision.PROPERTY_PORT));
+ columns.add(ImportableColumnImpl.newIgnoredColumn("LIEU_OBSERVATION_LIB"));
+ columns.add(ImportableColumnImpl.newIgnoredColumn("DATE_DEBUT"));
+ columns.add(ImportableColumnImpl.newIgnoredColumn("DATE_FIN"));
+
+ return columns;
+ }
+}
Copied: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialLocationImportModel.java (from rev 1044, trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/TerrestrialLocationImportModel.java)
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialLocationImportModel.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialLocationImportModel.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -0,0 +1,191 @@
+/*
+ * #%L
+ * Wao :: Business
+ * %%
+ * 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.io.csv2.models;
+
+import fr.ifremer.wao.bean.LocationType;
+import fr.ifremer.wao.entity.TerrestrialLocation;
+import fr.ifremer.wao.entity.TerrestrialLocationImpl;
+import fr.ifremer.wao.io.csv2.Common;
+import fr.ifremer.wao.io.csv2.ImportModel;
+import fr.ifremer.wao.io.csv2.ImportableColumn;
+import fr.ifremer.wao.io.csv2.ImportableColumnImpl;
+import fr.ifremer.wao.io.csv2.ValueParser;
+import fr.ifremer.wao.io.csv2.ValueSetter;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TerrestrialLocationImportModel implements ImportModel<TerrestrialLocation> {
+
+ protected List<ImportableColumn> allHeaders;
+
+ @Override
+ public void pushCsvHeaderNames(List<String> headerNames) {
+ // nothing to do
+ }
+
+ @Override
+ public TerrestrialLocation newEmptyInstance() {
+ return new TerrestrialLocationImpl();
+ }
+
+ protected String getCode(String value) {
+ String code = null;
+ if (StringUtils.isNotBlank(value)) {
+ int firstSpaceIndex = value.indexOf(" ");
+ code = value.substring(0, firstSpaceIndex);
+ }
+ return code;
+ }
+
+ protected String getName(String value) {
+ String name = null;
+ if (StringUtils.isNotBlank(value)) {
+ int firstSpaceIndex = value.indexOf(" ");
+ name = value.substring(firstSpaceIndex + 1, value.length());
+ }
+ return name;
+ }
+
+ public TerrestrialLocationImportModel() {
+
+ allHeaders = new ArrayList<ImportableColumn>();
+
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("TLIEU_COD",
+ new ValueParser<LocationType>() {
+ @Override
+ public LocationType parse(String value) {
+ if ("6".equals(value)) {
+ return LocationType.PORT;
+ } else if ("7".equals(value)) {
+ return LocationType.AUCTION;
+ }
+ throw new IllegalArgumentException(value + " is not a good location code");
+ }
+ },
+ new ValueSetter<TerrestrialLocation, LocationType>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, LocationType value) {
+ terrestrialLocation.setLocationType(value);
+ }
+ }
+ ));
+ allHeaders.add(ImportableColumnImpl.newIgnoredColumn("TLIEU_LIB"));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("LIEU_COD", TerrestrialLocation.PROPERTY_CODE));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("LIEU_LIB", TerrestrialLocation.PROPERTY_NAME));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Port",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setPortCode(getCode(value));
+ terrestrialLocation.setPortName(getName(value));
+ }
+ }
+ ));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Quartier maritime",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setDistrictCode(getCode(value));
+ terrestrialLocation.setDistrictName(getName(value));
+ }
+ }
+ ));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Département INSEE",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setDepartmentCode(getCode(value));
+ terrestrialLocation.setDepartmentName(getName(value));
+ }
+ }
+ ));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Sous-région IFREMER",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setSubRegionIfremerCode(getCode(value));
+ terrestrialLocation.setSubRegionIfremerName(getName(value));
+ }
+ }
+ ));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Région Ifremer",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setRegionIfremerCode(getCode(value));
+ terrestrialLocation.setRegionIfremerName(getName(value));
+ }
+ }
+ ));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Région INSEE",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setRegionCode(getCode(value));
+ terrestrialLocation.setRegionName(getName(value));
+ }
+ }
+ ));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Façade maritime",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setSeaboardCode(getCode(value));
+ terrestrialLocation.setSeaboardName(getName(value));
+ }
+ }
+ ));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Type de Région",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setRegionTypeCode(getCode(value));
+ terrestrialLocation.setRegionTypeName(getName(value));
+ }
+ }
+ ));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Littoral FAO",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setCoastFAOCode(getCode(value));
+ terrestrialLocation.setCoastFAOName(getName(value));
+ }
+ }
+ ));
+ allHeaders.add(ImportableColumnImpl.newMandatoryColumn("PAYS",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setCountryCode(getCode(value));
+ terrestrialLocation.setCountryName(getName(value));
+ }
+ }
+ ));
+ }
+
+ @Override
+ public List<ImportableColumn> getAllColumns() {
+ return allHeaders;
+ }
+}
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-02-24 13:10:51 UTC (rev 1044)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -48,15 +48,11 @@
import fr.ifremer.wao.entity.TerrestrialLocation;
import fr.ifremer.wao.entity.TerrestrialLocationDAO;
import fr.ifremer.wao.entity.TerrestrialLocationImpl;
-import fr.ifremer.wao.entity.TranslatableEntity;
-import fr.ifremer.wao.entity.Translation;
-import fr.ifremer.wao.entity.TranslationDAO;
import fr.ifremer.wao.io.csv.ImportHelper;
import fr.ifremer.wao.io.csv.WaoCsvHeader.FISHING_ZONE;
import fr.ifremer.wao.io.csv2.Import;
import fr.ifremer.wao.io.csv2.ImportModel;
-import fr.ifremer.wao.io.csv2.TerrestrialLocationImportModel;
-import org.apache.commons.lang.LocaleUtils;
+import fr.ifremer.wao.io.csv2.models.TerrestrialLocationImportModel;
import org.apache.commons.lang.StringUtils;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
@@ -68,7 +64,6 @@
import java.io.IOException;
import java.io.InputStream;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
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-02-24 13:10:51 UTC (rev 1044)
+++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-02-28 10:32:35 UTC (rev 1045)
@@ -1,159 +1,159 @@
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.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=
@@ -162,65 +162,65 @@
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.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)
Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java
===================================================================
--- trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java 2011-02-24 13:10:51 UTC (rev 1044)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java 2011-02-28 10:32:35 UTC (rev 1045)
@@ -24,6 +24,8 @@
import fr.ifremer.wao.bean.ValidationResult;
import fr.ifremer.wao.entity.SampleRow;
import fr.ifremer.wao.entity.TerrestrialLocation;
+import fr.ifremer.wao.io.csv2.models.SamplingPlanImportModel;
+import fr.ifremer.wao.io.csv2.models.TerrestrialLocationImportModel;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Ignore;
1
0
[Suiviobsmer-commits] r1044 - in trunk/wao-business/src/main: java/fr/ifremer/wao/service resources/i18n
by bleny@users.labs.libre-entreprise.org 24 Feb '11
by bleny@users.labs.libre-entreprise.org 24 Feb '11
24 Feb '11
Author: bleny
Date: 2011-02-24 13:10:51 +0000 (Thu, 24 Feb 2011)
New Revision: 1044
Log:
remove boat name from accidental mammal capture mail
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java
trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties
trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-02-23 15:54:22 UTC (rev 1043)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-02-24 13:10:51 UTC (rev 1044)
@@ -377,7 +377,6 @@
//
//Un observateur du programme Obsmer a renseigné dans WAO l'information suivante :
//
- //Navire : L'ARMILANT (487836)
//Marée : 25/10/2010 00:00 - 26/10/2010 00:00
//Métier : 2010_0037 Manche Ouest (Manche, Mer du Nord) Secteur Brest Granville centré autour de St malo OTB_DEF 80-90 Chalutage de fond côtier sole, seiche
//
@@ -391,12 +390,8 @@
String object = WaoUtils.translate(n_("wao.business.mammalsCapture.mail.subject"));
- // building 3 string, components of the body
+ // building 2 string, components of the body
- // the boat and its number
- String boat = contact.getBoat().getName() + " (" +
- contact.getBoat().getImmatriculation() + ")";
-
// the time of the capture (it's between tide begin and end)
String time = "";
if (contact.getObservationBeginDate() != null) {
@@ -421,7 +416,7 @@
// constructing the whole mail
String body = WaoUtils.translate(n_("wao.business.mammalsCapture.mail.message"),
- boat, time, profession, contact.getMammalsInfo());
+ time, profession, contact.getMammalsInfo());
if (log.isDebugEnabled()) {
log.debug("will send email with object '" + object + "' and body \n" + body);
Modified: trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties
===================================================================
--- trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-02-23 15:54:22 UTC (rev 1043)
+++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-02-24 13:10:51 UTC (rev 1044)
@@ -114,7 +114,7 @@
wao.business.contact.validation.commentAdminNecessaryForDataReliability=You must precise in admin comment why data reliability is '%s'
wao.business.contact.validation.dataReliabilityMissingForValidation=You must provide data reliability before validating
wao.business.entity.UserProfile.description=%s on %s%s
-wao.business.mammalsCapture.mail.message=Hello,\n\nAn observer of the ObsMer program provided to WAO the following information\:\n\nBoat\: %s\nTide\: %s\nProfession\: %s\n\nAccidental capture\:\n%s\n\nBest regards,\n\nObsmer program\nhttp\://www.ifremer.fr/wao
+wao.business.mammalsCapture.mail.message=Hello,\n\nAn observer of the ObsMer program provided to WAO the following information\:\n\nTide\: %s\nProfession\: %s\n\nAccidental capture\:\n%s\n\nBest regards,\n\nObsmer program\nhttp\://www.ifremer.fr/wao
wao.business.mammalsCapture.mail.subject=Obsmer WAO\: Information about an accidental capture
wao.business.other=Other
wao.business.readOnly=(read-only)
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-02-23 15:54:22 UTC (rev 1043)
+++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-02-24 13:10:51 UTC (rev 1044)
@@ -1,159 +1,159 @@
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.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\nNavire \: %s\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=
@@ -162,65 +162,65 @@
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.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
1
0