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
March 2011
- 3 participants
- 73 discussions
12 Mar '11
Author: tchemit
Date: 2011-03-12 14:20:10 +0000 (Sat, 12 Mar 2011)
New Revision: 1060
Log:
Update mavenpom4labs to 2.5.2.
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-03-11 17:30:31 UTC (rev 1059)
+++ trunk/pom.xml 2011-03-12 14:20:10 UTC (rev 1060)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4labs</artifactId>
- <version>2.5.2-SNAPSHOT</version>
+ <version>2.5.2</version>
</parent>
<groupId>fr.ifremer</groupId>
1
0
11 Mar '11
Author: bleny
Date: 2011-03-11 17:30:31 +0000 (Fri, 11 Mar 2011)
New Revision: 1059
Log:
refactor import engine ; add export capability + tests ; use it for obsdeb sampling plan export
Added:
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Column.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Export.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ExportModel.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ExportableColumn.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableExportableColumn.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ModelBuilder.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueFormatter.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueGetter.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueGetterSetter.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParserFormatter.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportExportModel.java
trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ExportTest.java
Removed:
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv/ExportHelper.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/Import.java
trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportModel.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
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java
trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/IndicatorLevels.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/AbstractMappedGridDataSource.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/SampleRowModelFactory.java
trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml
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-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -98,7 +98,7 @@
@Override
protected void createBoatInfosNewColumns_1_2a(List<String> queries) {
- // Evo #2060 : add new columns in BoatInfos (contactSiret,
+ // Evo #2060 : add new columnsForImport in BoatInfos (contactSiret,
// contactAddress1, contactAddress2, contactCity, contactPostalCode)
queries.add("ALTER TABLE BoatInfos ADD contactAddress1 TEXT;");
queries.add("ALTER TABLE BoatInfos ADD contactAddress2 TEXT;");
@@ -448,7 +448,7 @@
return request;
}
- /** Add a columns to Contact. */
+ /** Add a columnsForImport to Contact. */
@Override
protected void addDataReliability_1_6(List<String> queries) {
queries.add(String.format("ALTER TABLE Contact ADD dataReliabilityOrdinal SMALLINT NOT NULL DEFAULT %s;",
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv/ExportHelper.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv/ExportHelper.java 2011-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv/ExportHelper.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -45,7 +45,7 @@
* <pre>
* - Instanciate {@link #ExportHelper(CsvWriter, int) }
* (with abstract method implementations if needed).
- * - Call {@link #writeHeaders() } method to prepare columns and write
+ * - Call {@link #writeHeaders() } method to prepare columnsForImport and write
* first row in the resulting file.
* - In the loop data, first use {@link #newRecord() } to prepare the current
* record.
@@ -68,7 +68,7 @@
/** Current record to write **/
protected String[] record;
- /** Number of columns/headers in resulting export **/
+ /** Number of columnsForImport/headers in resulting export **/
protected int nbHeaders;
/**
@@ -76,7 +76,7 @@
* write data in it.
*
* @param writer the CsvWriter used for record data
- * @param nbHeaders number of columns in the resulting file
+ * @param nbHeaders number of columnsForImport in the resulting file
* @throws IOException
*/
public ExportHelper(CsvWriter writer, int nbHeaders) throws IOException {
Copied: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Column.java (from rev 1052, trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java)
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Column.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Column.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,123 @@
+/*
+ * #%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 java.text.ParseException;
+
+public class Column<E, T> implements ImportableExportableColumn<E, T> {
+
+ protected String headerName;
+
+ protected boolean mandatory = true;
+
+ protected boolean ignored;
+
+ protected ValueParser<T> valueParser;
+
+ protected ValueFormatter<T> valueFormatter;
+
+ protected ValueGetter<E, T> valueGetter;
+
+ protected ValueSetter<E, T> valueSetter;
+
+ public Column(String headerName, ValueParser<T> valueParser, ValueSetter<E, T> valueSetter, boolean ignored) {
+ this.headerName = headerName;
+ this.valueParser = valueParser;
+ this.valueSetter = valueSetter;
+ this.ignored = ignored;
+ }
+
+ public Column(String headerName, ValueGetter<E, T> valueGetter, ValueFormatter<T> valueFormatter) {
+ this.headerName = headerName;
+ this.valueGetter = valueGetter;
+ this.valueFormatter = valueFormatter;
+ }
+
+ public Column(String headerName, ValueGetterSetter<E, T> valueGetterSetter, ValueParserFormatter<T> valueParserFormatter) {
+ this.headerName = headerName;
+ this.valueGetter = valueGetterSetter;
+ this.valueFormatter = valueParserFormatter;
+ this.valueSetter = valueGetterSetter;
+ this.valueParser = valueParserFormatter;
+ }
+
+ @Override
+ public String getHeaderName() {
+ return headerName;
+ }
+
+ @Override
+ public boolean isMandatory() {
+ return mandatory;
+ }
+
+ @Override
+ public boolean isIgnored() {
+ return ignored;
+ }
+
+ @Override
+ public String formatValue(T value) {
+ if (valueFormatter == null) {
+ throw new UnsupportedOperationException("no formatter provided for " + this);
+ } else {
+ return valueFormatter.format(value);
+ }
+ }
+
+ @Override
+ public T parseValue(String value) throws ParseException {
+ if (valueParser == null) {
+ throw new UnsupportedOperationException("no parser provided for " + this);
+ } else {
+ return valueParser.parse(value);
+ }
+ }
+
+ @Override
+ public T getValue(E object) throws Exception {
+ if (valueGetter == null) {
+ throw new UnsupportedOperationException("no getter provided for " + this);
+ } else {
+ return valueGetter.get(object);
+ }
+ }
+
+ @Override
+ public void setValue(E object, T value) throws Exception {
+ if ( ! isIgnored()) {
+ if (valueSetter == null) {
+ throw new UnsupportedOperationException("no setter provided");
+ } else {
+ valueSetter.set(object, value);
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "{" +
+ "headerName='" + headerName + '\'' +
+ ", mandatory=" + mandatory +
+ ", ignored=" + ignored +
+ '}';
+ }
+}
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-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Common.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -1,7 +1,9 @@
package fr.ifremer.wao.io.csv2;
import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.beanutils.PropertyUtils;
+import java.lang.reflect.InvocationTargetException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@@ -9,16 +11,21 @@
public class Common {
- public static class StringValueParser implements ValueParser<String> {
+ public static class StringValueParser implements ValueParserFormatter<String> {
@Override
public String parse(String value) {
return value;
}
+
+ @Override
+ public String format(String value) {
+ return value == null ? "" : value;
+ }
}
- public static final ValueParser<String> STRING_VALUE_PARSER = new StringValueParser();
+ public static final ValueParserFormatter<String> STRING = new StringValueParser();
- public static class BeanProperty<E, T> implements ValueSetter<E, T> {
+ public static class BeanProperty<E, T> implements ValueGetterSetter<E, T> {
protected String propertyName;
@@ -30,13 +37,19 @@
public void set(E bean, T value) throws Exception {
BeanUtils.setProperty(bean, propertyName, value);
}
+
+ @Override
+ public T get(E object) throws Exception {
+ T value = (T) PropertyUtils.getProperty(object, propertyName);
+ return value;
+ }
}
- public static class DateValueParser implements ValueParser<Date> {
+ public static class DateValue implements ValueParserFormatter<Date> {
protected DateFormat dateFormat;
- public DateValueParser(String dateFormatPattern) {
+ public DateValue(String dateFormatPattern) {
this.dateFormat = new SimpleDateFormat(dateFormatPattern);
}
@@ -44,8 +57,13 @@
public Date parse(String value) throws ParseException {
return dateFormat.parse(value);
}
+
+ @Override
+ public String format(Date value) {
+ return dateFormat.format(value);
+ }
}
- public static final ValueParser<Date> DAY_PARSER = new DateValueParser("dd/MM/yyyy");
+ public static final ValueParserFormatter<Date> DAY = new DateValue("dd/MM/yyyy");
}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Export.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Export.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Export.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,53 @@
+package fr.ifremer.wao.io.csv2;
+
+import org.apache.commons.io.IOUtils;
+import org.nuiton.util.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+public class Export<E> {
+
+ private static final Logger log = LoggerFactory.getLogger(Export.class);
+
+ protected ExportModel<E> model;
+
+ protected Collection<E> data;
+
+ public Export(ExportModel<E> exportModel, Collection<E> data) {
+ this.model = exportModel;
+ this.data = data;
+ }
+
+ public InputStream startExport() throws Exception {
+ String separator = String.valueOf(model.getSeparator());
+ StringBuilder csv = new StringBuilder();
+
+ // add headers
+ List<String> headerNames = new LinkedList<String>();
+ for (ExportableColumn column : model.getColumnsForExport()) {
+ headerNames.add(column.getHeaderName());
+ }
+ String headersLine = StringUtil.join(headerNames, separator, true);
+ csv.append(headersLine).append("\n");
+
+ if (log.isDebugEnabled()) {
+ log.debug("headers for export are '" + headersLine + "'");
+ log.debug("will export " + data.size() + " lines");
+ }
+
+ for (E object : data) {
+ for (ExportableColumn column : model.getColumnsForExport()) {
+ Object value = column.getValue(object);
+ String formattedValue = column.formatValue(value);
+ csv.append(formattedValue).append(separator);
+ }
+ csv.append("\n");
+ }
+ return IOUtils.toInputStream(csv);
+ }
+}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ExportModel.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ExportModel.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ExportModel.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,11 @@
+package fr.ifremer.wao.io.csv2;
+
+import java.util.Collection;
+
+public interface ExportModel<E> {
+
+ char getSeparator();
+
+ Collection<ExportableColumn> getColumnsForExport();
+
+}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ExportableColumn.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ExportableColumn.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ExportableColumn.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,11 @@
+package fr.ifremer.wao.io.csv2;
+
+public interface ExportableColumn<E, T> {
+
+ String getHeaderName();
+
+ T getValue(E object) throws Exception;
+
+ String formatValue(T 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-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -51,7 +51,7 @@
protected List<ImportableColumn> getNonIgnoredHeaders() {
List<ImportableColumn> nonIgnoredHeaders = new ArrayList<ImportableColumn>();
- for (ImportableColumn field : model.getAllColumns()) {
+ for (ImportableColumn field : model.getColumnsForImport()) {
if ( ! field.isIgnored()) {
nonIgnoredHeaders.add(field);
}
@@ -61,7 +61,7 @@
protected List<ImportableColumn> getAllMandatoryHeaders() {
List<ImportableColumn> allMandatoryHeaders = new ArrayList<ImportableColumn>();
- for (ImportableColumn field : model.getAllColumns()) {
+ for (ImportableColumn field : model.getColumnsForImport()) {
if (field.isMandatory()) {
allMandatoryHeaders.add(field);
}
@@ -75,10 +75,10 @@
}
this.model = model;
validateModel();
- this.reader = new CsvReader(inputStream, ';', Charset.forName("UTF-8"));
+ this.reader = new CsvReader(inputStream, model.getSeparator(), Charset.forName("UTF-8"));
reader.setTrimWhitespace(true);
if (log.isTraceEnabled()) {
- log.trace("all headers are " + model.getAllColumns());
+ log.trace("all headers are " + model.getColumnsForImport());
log.trace("all non-ignored headers are " + getNonIgnoredHeaders());
log.trace("all mandatory headers are " + getAllMandatoryHeaders());
}
@@ -86,11 +86,11 @@
protected boolean validateModel() {
Set<String> headerNames = new HashSet<String>();
- for (ImportableColumn importableColumn : model.getAllColumns()) {
+ for (ImportableColumn importableColumn : model.getColumnsForImport()) {
String headerName = importableColumn.getHeaderName();
boolean alreadyUsed = ! headerNames.add(headerName);
if (alreadyUsed) {
- throw new IllegalArgumentException("model contains multiple columns named '" + headerName + "'");
+ throw new IllegalArgumentException("model contains multiple columnsForImport named '" + headerName + "'");
}
}
return true;
@@ -119,7 +119,7 @@
csvHeaders.add(header);
}
- for(ImportableColumn field : model.getAllColumns()) {
+ for(ImportableColumn field : model.getColumnsForImport()) {
csvHeaders.remove(field.getHeaderName());
}
@@ -128,7 +128,7 @@
String validationMessage = String.format(
"Les champs %s ne sont pas reconnus. Les champs possibles sont %s",
StringUtil.join(csvHeaders, ", " ,true),
- StringUtil.join(model.getAllColumns(), ", " ,true));
+ StringUtil.join(model.getColumnsForImport(), ", " ,true));
csvValidationResult.setMessage(validationMessage);
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportModel.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportModel.java 2011-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportModel.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -25,9 +25,11 @@
public interface ImportModel<E> {
+ char getSeparator();
+
void pushCsvHeaderNames(List<String> headerNames);
E newEmptyInstance();
- Collection<ImportableColumn> getAllColumns();
+ Collection<ImportableColumn> getColumnsForImport();
}
Deleted: 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-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -1,118 +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 org.apache.commons.beanutils.BeanUtils;
-
-import java.text.ParseException;
-
-public class ImportableColumnImpl<E, T> implements ImportableColumn<E, T> {
-
- protected String headerName;
-
- protected boolean mandatory = true;
-
- protected boolean ignored;
-
- protected ValueParser<T> valueParser;
-
- protected ValueSetter<E, T> valueSetter;
-
- protected ImportableColumnImpl() {}
-
- /** a new <strong>ignored</strong> header */
- 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 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;
- }
-
- @Override
- public boolean isMandatory() {
- return mandatory;
- }
-
- @Override
- public boolean isIgnored() {
- return ignored;
- }
-
- @Override
- public T parseValue(String value) throws ParseException {
- if (valueParser == null) {
- throw new UnsupportedOperationException("no parser provided for " + this);
- } else {
- return valueParser.parse(value);
- }
- }
-
- @Override
- public void setValue(E object, T value) throws Exception {
- if ( ! isIgnored()) {
- if (valueSetter == null) {
- throw new UnsupportedOperationException("no setter provided");
- } else {
- valueSetter.set(object, value);
- }
- }
- }
-
- @Override
- public String toString() {
- return "ImportableColumnImpl{" +
- "headerName='" + headerName + '\'' +
- ", mandatory=" + mandatory +
- ", ignored=" + ignored +
- '}';
- }
-}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableExportableColumn.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableExportableColumn.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableExportableColumn.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,4 @@
+package fr.ifremer.wao.io.csv2;
+
+public interface ImportableExportableColumn<E, T> extends ImportableColumn<E, T>, ExportableColumn<E, T> {
+}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ModelBuilder.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ModelBuilder.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ModelBuilder.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,82 @@
+package fr.ifremer.wao.io.csv2;
+
+import java.util.Collection;
+import java.util.LinkedList;
+
+public class ModelBuilder<E> {
+
+ protected Collection<ImportableColumn> columnsForImport = new LinkedList<ImportableColumn>();
+
+ protected Collection<ExportableColumn> columnsForExport = new LinkedList<ExportableColumn>();
+
+ /** a new <strong>ignored</strong> header */
+ public <E,T> ImportableColumn<E, T> newIgnoredColumn(String headerName) {
+ Column<E, T> newColumn = new Column(headerName, null, null, true);
+ columnsForImport.add(newColumn);
+ return newColumn;
+ }
+
+ /** a new <strong>mandatory</strong> header */
+ public ImportableColumn<E, String> newMandatoryColumn(String headerName, String propertyName) {
+ return newMandatoryColumn(headerName, Common.STRING, propertyName);
+ }
+
+ public <T> ImportableColumn<E, T> newMandatoryColumn(String headerName, ValueParser<T> valueParser, String propertyName) {
+ return newMandatoryColumn(headerName, valueParser, new Common.BeanProperty<E, T>(propertyName));
+ }
+
+ public ImportableColumn<E, String> newMandatoryColumn(String headerName, ValueSetter<E, String> valueSetter) {
+ return newMandatoryColumn(headerName, Common.STRING, valueSetter);
+ }
+
+ public <T> ImportableColumn<E, T> newMandatoryColumn(String headerName, ValueParser<T> valueParser, ValueSetter<E, T> valueSetter) {
+ Column<E, T> newColumn = new Column(headerName, valueParser, valueSetter, false);
+ columnsForImport.add(newColumn);
+ return newColumn;
+ }
+
+ public ExportableColumn<E, String> newColumnForExport(String headerName, String propertyName) {
+ return newColumnForExport(headerName, propertyName, Common.STRING);
+ }
+
+ public ExportableColumn<E, String> newColumnForExport(String headerName, ValueGetter<E, String> valueGetter) {
+ return newColumnForExport(headerName, valueGetter, Common.STRING);
+ }
+
+ public <T> ExportableColumn<E, T> newColumnForExport(String headerName, String propertyName, ValueFormatter<T> valueFormatter) {
+ return newColumnForExport(headerName, new Common.BeanProperty<E, T>(propertyName), valueFormatter);
+ }
+
+ public <T> ExportableColumn<E, T> newColumnForExport(String headerName, ValueGetter<E, T> valueGetter, ValueFormatter<T> valueFormatter) {
+ ExportableColumn<E, T> newColumn = new Column(headerName, valueGetter, valueFormatter);
+ columnsForExport.add(newColumn);
+ return newColumn;
+ }
+
+ public ImportableExportableColumn<E, String> newColumnForImportExport(String headerName, String propertyName) {
+ return newColumnForImportExport(headerName, propertyName, Common.STRING);
+ }
+
+ public ImportableExportableColumn<E, String> newColumnForImportExport(String headerName, ValueGetterSetter<E, String> valueGetterSetter) {
+ return newColumnForImportExport(headerName, valueGetterSetter, Common.STRING);
+ }
+
+ public <T> ImportableExportableColumn<E, T> newColumnForImportExport(String headerName, String propertyName, ValueParserFormatter<T> valueParserFormatter) {
+ return newColumnForImportExport(headerName, new Common.BeanProperty<E, T>(propertyName), valueParserFormatter);
+ }
+
+ public <T> ImportableExportableColumn<E, T> newColumnForImportExport(String headerName, ValueGetterSetter<E, T> valueGetterSetter, ValueParserFormatter<T> valueParserFormatter) {
+ ImportableExportableColumn<E, T> newColumn = new Column(headerName, valueGetterSetter, valueParserFormatter);
+ columnsForImport.add(newColumn);
+ columnsForExport.add(newColumn);
+ return newColumn;
+ }
+
+ public Collection<ImportableColumn> getColumnsForImport() {
+ return columnsForImport;
+ }
+
+ public Collection<ExportableColumn> getColumnsForExport() {
+ return columnsForExport;
+ }
+}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueFormatter.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueFormatter.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueFormatter.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,7 @@
+package fr.ifremer.wao.io.csv2;
+
+public interface ValueFormatter<T> {
+
+ String format(T value);
+
+}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueGetter.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueGetter.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueGetter.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,7 @@
+package fr.ifremer.wao.io.csv2;
+
+public interface ValueGetter<E, T> {
+
+ T get(E object) throws Exception;
+
+}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueGetterSetter.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueGetterSetter.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueGetterSetter.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,4 @@
+package fr.ifremer.wao.io.csv2;
+
+public interface ValueGetterSetter<E, T> extends ValueGetter<E, T>, ValueSetter<E, T> {
+}
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParserFormatter.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParserFormatter.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParserFormatter.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,4 @@
+package fr.ifremer.wao.io.csv2;
+
+public interface ValueParserFormatter<T> extends ValueParser<T>, ValueFormatter<T> {
+}
Copied: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportExportModel.java (from rev 1056, 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/SamplingPlanImportExportModel.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportExportModel.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,189 @@
+/*
+ * #%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.entity.TerrestrialDivision;
+import fr.ifremer.wao.io.csv2.Common;
+import fr.ifremer.wao.io.csv2.ExportModel;
+import fr.ifremer.wao.io.csv2.ExportableColumn;
+import fr.ifremer.wao.io.csv2.ImportModel;
+import fr.ifremer.wao.io.csv2.ImportableColumn;
+import fr.ifremer.wao.io.csv2.ModelBuilder;
+import fr.ifremer.wao.io.csv2.ValueGetterSetter;
+import fr.ifremer.wao.io.csv2.ValueParserFormatter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.text.ParseException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ */
+public class SamplingPlanImportExportModel implements ImportModel<SampleRow>, ExportModel<SampleRow> {
+
+ private static final Logger log =
+ LoggerFactory.getLogger(SamplingPlanImportExportModel.class);
+
+ static class ObservationUnitParserFormatter implements ValueParserFormatter<TerrestrialDivision> {
+
+ protected Map<String, Map<String, TerrestrialDivision>> observationUnits;
+
+ protected String currentRegionCode;
+
+ ObservationUnitParserFormatter(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 la région '" + currentRegionCode + "'");
+ }
+ return observationUnit;
+ }
+
+ @Override
+ public String format(TerrestrialDivision terrestrialDivision) {
+ return terrestrialDivision.getObservationUnitCode();
+ }
+
+ public void setCurrentRegionCode(String regionCode) {
+ currentRegionCode = regionCode;
+ }
+ }
+
+ static class RegionCodeSetter implements ValueGetterSetter<SampleRow, String> {
+
+ protected ObservationUnitParserFormatter observationUnitSetter;
+
+ RegionCodeSetter(ObservationUnitParserFormatter observationUnitSetter) {
+ this.observationUnitSetter = observationUnitSetter;
+ }
+
+ @Override
+ public String get(SampleRow sampleRow) throws Exception {
+ String regionCode;
+ if (sampleRow.getObservationUnit() == null) {
+ regionCode = "";
+ } else {
+ regionCode = sampleRow.getObservationUnit().getRegionIfremerCode();
+ }
+ return regionCode;
+ }
+
+ @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>> indexedObservationUnits;
+
+ protected ModelBuilder<SampleRow> modelBuilder;
+
+ /** Constructor used for export */
+ public SamplingPlanImportExportModel() {
+ buildModel();
+ }
+
+ /** Constructor used for import */
+ public SamplingPlanImportExportModel(List<TerrestrialDivision> observationUnits) {
+ indexObservationUnits(observationUnits);
+ buildModel();
+ }
+
+ @Override
+ public void pushCsvHeaderNames(List<String> headerNames) {
+ // nothing to do
+ }
+
+ @Override
+ public char getSeparator() {
+ return ';';
+ }
+
+ @Override
+ public SampleRow newEmptyInstance() {
+ SampleRow newSampleRow = new SampleRowImpl();
+ newSampleRow.setObsProgram(ObsProgram.OBSDEB);
+ return newSampleRow;
+ }
+
+ protected void indexObservationUnits(List<TerrestrialDivision> observationUnits) {
+ indexedObservationUnits = new HashMap<String, Map<String, TerrestrialDivision>>();
+ for (TerrestrialDivision terrestrialDivision : observationUnits) {
+ String regionCode = terrestrialDivision.getRegionIfremerCode();
+ Map<String, TerrestrialDivision> unitCodesToDivision = indexedObservationUnits.get(regionCode);
+ if (unitCodesToDivision == null) {
+ unitCodesToDivision = new HashMap<String, TerrestrialDivision>();
+ }
+ unitCodesToDivision.put(terrestrialDivision.getObservationUnitCode(), terrestrialDivision);
+ indexedObservationUnits.put(regionCode, unitCodesToDivision);
+ }
+
+ if (log.isDebugEnabled()) {
+ for (Map.Entry<String, Map<String, TerrestrialDivision>> entry : indexedObservationUnits.entrySet()) {
+ log.debug(entry.getKey());
+ for (Map.Entry<String, TerrestrialDivision> unitCodesToDivision : entry.getValue().entrySet()) {
+ log.debug(" -> " + unitCodesToDivision.getKey() + " -> " + unitCodesToDivision.getValue());
+ }
+ }
+ }
+ }
+
+ protected void buildModel() {
+ modelBuilder = new ModelBuilder<SampleRow>();
+ modelBuilder.newColumnForImportExport("PLAN_CODE", SampleRow.PROPERTY_CODE);
+ modelBuilder.newColumnForImportExport("OBSERVATEUR_COD", SampleRow.PROPERTY_GROUP_NAME);
+ modelBuilder.newColumnForImportExport("OBSERVATION_DATE", SampleRow.PROPERTY_DAY, Common.DAY);
+ ObservationUnitParserFormatter observationUnitParser = new ObservationUnitParserFormatter(indexedObservationUnits);
+ ValueGetterSetter<SampleRow, String> regionCodeGetterSetter = new RegionCodeSetter(observationUnitParser);
+ modelBuilder.newColumnForImportExport("REGION_IFREMER_COD", regionCodeGetterSetter);
+ modelBuilder.newColumnForImportExport("UNITE_OBSERVATION_COD", SampleRow.PROPERTY_OBSERVATION_UNIT, observationUnitParser);
+ }
+
+ @Override
+ public Collection<ImportableColumn> getColumnsForImport() {
+ Collection<ImportableColumn> columns = modelBuilder.getColumnsForImport();
+ return columns;
+ }
+
+ @Override
+ public Collection<ExportableColumn> getColumnsForExport() {
+ Collection<ExportableColumn> columns = modelBuilder.getColumnsForExport();
+ return columns;
+ }
+}
Deleted: 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-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -1,157 +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.models;
-
-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> {
-
-
- 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>> indexedObservationUnits;
-
- public SamplingPlanImportModel(List<TerrestrialDivision> observationUnits) {
-
- indexedObservationUnits = new HashMap<String, Map<String, TerrestrialDivision>>();
- for (TerrestrialDivision terrestrialDivision : observationUnits) {
- String regionCode = terrestrialDivision.getRegionIfremerCode();
- Map<String, TerrestrialDivision> unitCodesToDivision = indexedObservationUnits.get(regionCode);
- if (unitCodesToDivision == null) {
- unitCodesToDivision = new HashMap<String, TerrestrialDivision>();
- }
- unitCodesToDivision.put(terrestrialDivision.getObservationUnitCode(), terrestrialDivision);
- indexedObservationUnits.put(regionCode, unitCodesToDivision);
- }
-
- if (log.isDebugEnabled()) {
- for (Map.Entry<String, Map<String, TerrestrialDivision>> entry : indexedObservationUnits.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) {
- // nothing to do
- }
-
- @Override
- public SampleRow newEmptyInstance() {
- SampleRow newSampleRow = new SampleRowImpl();
- newSampleRow.setObsProgram(ObsProgram.OBSDEB);
- return newSampleRow;
- }
-
- @Override
- public Collection<ImportableColumn> getAllColumns() {
- 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(indexedObservationUnits);
- 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/io/csv2/models/TerrestrialDivisionImportModel.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialDivisionImportModel.java 2011-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialDivisionImportModel.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -5,12 +5,10 @@
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.ModelBuilder;
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;
import java.util.List;
import java.util.Map;
@@ -35,6 +33,11 @@
}
@Override
+ public char getSeparator() {
+ return ';';
+ }
+
+ @Override
public void pushCsvHeaderNames(List<String> headerNames) {
// nothing to do
}
@@ -45,10 +48,10 @@
}
@Override
- public Collection<ImportableColumn> getAllColumns() {
- List<ImportableColumn> columns = new ArrayList<ImportableColumn>();
+ public Collection<ImportableColumn> getColumnsForImport() {
+ ModelBuilder<TerrestrialDivision> modelBuilder = new ModelBuilder<TerrestrialDivision>();
- columns.add(ImportableColumnImpl.newMandatoryColumn(
+ modelBuilder.newMandatoryColumn(
"ID_STRATE",
new ValueParser<String>() {
/** null if string is empty */
@@ -60,28 +63,28 @@
return code;
}
},
- TerrestrialDivision.PROPERTY_CODE));
- columns.add(ImportableColumnImpl.newMandatoryColumn(
+ TerrestrialDivision.PROPERTY_CODE);
+ modelBuilder.newMandatoryColumn(
"REGION_IFREMER_COD",
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;
}
},
- 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(
+ TerrestrialDivision.PROPERTY_REGION_IFREMER_CODE);
+ modelBuilder.newIgnoredColumn("REGION_IFREMER_LIB");
+ modelBuilder.newMandatoryColumn("ZONE_COMPETENCE_COD", TerrestrialDivision.PROPERTY_SKILL_ZONE_CODE);
+ modelBuilder.newMandatoryColumn("ZONE_COMPETENCE_LIB", TerrestrialDivision.PROPERTY_SKILL_ZONE_NAME);
+ modelBuilder.newMandatoryColumn("SOUS_POPULATION_COD", TerrestrialDivision.PROPERTY_SUB_POPULATION_CODE);
+ modelBuilder.newMandatoryColumn("SOUS_POPULATION_LIB", TerrestrialDivision.PROPERTY_SUB_POPULATION_NAME);
+ modelBuilder.newMandatoryColumn("UNITE_OBSERVATION_COD", TerrestrialDivision.PROPERTY_OBSERVATION_UNIT_CODE);
+ modelBuilder.newMandatoryColumn("UNITE_OBSERVATION_LIB", TerrestrialDivision.PROPERTY_OBSERVATION_UNIT_NAME);
+ modelBuilder.newMandatoryColumn(
"LIEU_OBSERVATION_COD",
// the value given is a code of a port, let's find and associate
new ValueParser<TerrestrialLocation>() {
@@ -94,11 +97,11 @@
return port;
}
},
- TerrestrialDivision.PROPERTY_PORT));
- columns.add(ImportableColumnImpl.newIgnoredColumn("LIEU_OBSERVATION_LIB"));
- columns.add(ImportableColumnImpl.newIgnoredColumn("DATE_DEBUT"));
- columns.add(ImportableColumnImpl.newIgnoredColumn("DATE_FIN"));
+ TerrestrialDivision.PROPERTY_PORT);
+ modelBuilder.newIgnoredColumn("LIEU_OBSERVATION_LIB");
+ modelBuilder.newIgnoredColumn("DATE_DEBUT");
+ modelBuilder.newIgnoredColumn("DATE_FIN");
- return columns;
+ return modelBuilder.getColumnsForImport();
}
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialLocationImportModel.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialLocationImportModel.java 2011-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/TerrestrialLocationImportModel.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -21,22 +21,27 @@
package fr.ifremer.wao.io.csv2.models;
import fr.ifremer.wao.bean.LocationType;
+import fr.ifremer.wao.entity.TerrestrialDivision;
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.Column;
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.ModelBuilder;
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.Collection;
import java.util.List;
public class TerrestrialLocationImportModel implements ImportModel<TerrestrialLocation> {
- protected List<ImportableColumn> allHeaders;
+ @Override
+ public char getSeparator() {
+ return ';';
+ }
@Override
public void pushCsvHeaderNames(List<String> headerNames) {
@@ -66,78 +71,79 @@
return name;
}
- public TerrestrialLocationImportModel() {
+ @Override
+ public Collection<ImportableColumn> getColumnsForImport() {
- allHeaders = new ArrayList<ImportableColumn>();
+ ModelBuilder<TerrestrialLocation> modelBuilder = new ModelBuilder<TerrestrialLocation>();
- 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;
+ modelBuilder.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");
}
- 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);
+ }
}
- },
- new ValueSetter<TerrestrialLocation, LocationType>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, LocationType value) {
- terrestrialLocation.setLocationType(value);
+ );
+ modelBuilder.newIgnoredColumn("TLIEU_LIB");
+ modelBuilder.newMandatoryColumn("LIEU_COD", TerrestrialLocation.PROPERTY_CODE);
+ modelBuilder.newMandatoryColumn("LIEU_LIB", TerrestrialLocation.PROPERTY_NAME);
+ modelBuilder.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.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));
+ );
+ modelBuilder.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("Quartier maritime",
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setDistrictCode(getCode(value));
- terrestrialLocation.setDistrictName(getName(value));
+ );
+ modelBuilder.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("Département INSEE",
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setDepartmentCode(getCode(value));
- terrestrialLocation.setDepartmentName(getName(value));
+ );
+ modelBuilder.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("Sous-région IFREMER",
- new ValueSetter<TerrestrialLocation, String>() {
- @Override
- public void set(TerrestrialLocation terrestrialLocation, String value) {
- terrestrialLocation.setSubRegionIfremerCode(getCode(value));
- terrestrialLocation.setSubRegionIfremerName(getName(value));
+ );
+ modelBuilder.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 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",
+ );
+ modelBuilder.newMandatoryColumn("Région INSEE",
new ValueSetter<TerrestrialLocation, String>() {
@Override
public void set(TerrestrialLocation terrestrialLocation, String value) {
@@ -145,8 +151,8 @@
terrestrialLocation.setRegionName(getName(value));
}
}
- ));
- allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Façade maritime",
+ );
+ modelBuilder.newMandatoryColumn("Façade maritime",
new ValueSetter<TerrestrialLocation, String>() {
@Override
public void set(TerrestrialLocation terrestrialLocation, String value) {
@@ -154,8 +160,8 @@
terrestrialLocation.setSeaboardName(getName(value));
}
}
- ));
- allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Type de Région",
+ );
+ modelBuilder.newMandatoryColumn("Type de Région",
new ValueSetter<TerrestrialLocation, String>() {
@Override
public void set(TerrestrialLocation terrestrialLocation, String value) {
@@ -163,8 +169,8 @@
terrestrialLocation.setRegionTypeName(getName(value));
}
}
- ));
- allHeaders.add(ImportableColumnImpl.newMandatoryColumn("Littoral FAO",
+ );
+ modelBuilder.newMandatoryColumn("Littoral FAO",
new ValueSetter<TerrestrialLocation, String>() {
@Override
public void set(TerrestrialLocation terrestrialLocation, String value) {
@@ -172,20 +178,16 @@
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));
+ );
+ modelBuilder.newMandatoryColumn("PAYS",
+ new ValueSetter<TerrestrialLocation, String>() {
+ @Override
+ public void set(TerrestrialLocation terrestrialLocation, String value) {
+ terrestrialLocation.setCountryCode(getCode(value));
+ terrestrialLocation.setCountryName(getName(value));
+ }
}
- }
- ));
+ );
+ return modelBuilder.getColumnsForImport();
}
-
- @Override
- public List<ImportableColumn> getAllColumns() {
- return allHeaders;
- }
}
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-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -77,8 +77,10 @@
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 fr.ifremer.wao.io.csv2.Export;
+import fr.ifremer.wao.io.csv2.ExportModel;
import fr.ifremer.wao.io.csv2.Import;
-import fr.ifremer.wao.io.csv2.models.SamplingPlanImportModel;
+import fr.ifremer.wao.io.csv2.models.SamplingPlanImportExportModel;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
@@ -915,146 +917,128 @@
}
}
-// /**
-// * Prepare the Binder for Profession copy. This method is called in
-// * service constructor. The copy from two Profession will be available
-// * anywhere using BinderProvider.get(Profession.class).copy(source, dest);
-// *
-// * @see org.nuiton.util.beans.Binder
-// * @see org.nuiton.util.beans.BinderProvider
-// */
-// protected void prepareBinderForProfession() {
-// BinderBuilder builder = new BinderBuilder();
-// builder.createBinderModel(Profession.class).addSimpleProperties(
-// Profession.CODE_DCF5,
-// Profession.LIBELLE,
-// Profession.MESH_SIZE,
-// Profession.OTHER,
-// Profession.SIZE,
-// Profession.SPECIES);
-// BinderProvider.registerBinder(builder);
-// }
-
@Override
public InputStream executeExportSamplingPlanCsv(TopiaContext transaction,
List<Object> errorArgs, ConnectedUser user, SamplingFilter filter)
throws Exception {
- CsvWriter writer = null;
- try {
- DateFormat dateFormat = SAMPLING.getDateFormat();
-// errorArgs.add(dateFormat.format(period.getFromDate()));
-// errorArgs.add(dateFormat.format(period.getThruDate()));
+ SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction);
+ WaoQueryBuilder builder = context.newQueryBuilder();
+ WaoQueryHelper.SampleRowProperty sampleRowProperty =
+ builder.initializeForSampleRow(false);
- File file = File.createTempFile("wao-samplingPlan-", ".csv");
- file.deleteOnExit();
+ TopiaQuery query = builder.applySamplingFilter(filter).
+ addOrder(sampleRowProperty.code());
- FileOutputStream output = new FileOutputStream(file);
- writer = new CsvWriter(output, ',', context.getCsvCharset());
+ List<SampleRow> rows = dao.findAllByQuery(query);
- PeriodDates period = filter.getPeriod();
- period.setPattern(SAMPLING.defaultDatePattern());
- List<String> monthHeaders = period.getFormatedMonths();
+ InputStream csv;
- SamplingExport export =
- new SamplingExport(writer, user, monthHeaders);
+ if (ObsProgram.OBSDEB.equals(filter.getObsProgram())) {
- export.writeHeaders();
+ ExportModel<SampleRow> exportModel = new SamplingPlanImportExportModel();
+ Export<SampleRow> export = new Export(exportModel, rows);
+ csv = export.startExport();
- // Get sampleRows from database filtered
- SampleRowDAO dao = WaoDAOHelper.getSampleRowDAO(transaction);
-// String sampleRowAlias = "S";
-// String sampleRowCodeProperty =
-// TopiaQuery.getProperty(sampleRowAlias, SampleRow.CODE);
-// TopiaQuery query = dao.createQuery(sampleRowAlias);
-// filter.prepareQueryForSampling(query, sampleRowAlias);
-//
-// query.addOrder(sampleRowCodeProperty);
+ } else {
- WaoQueryBuilder builder = context.newQueryBuilder();
- WaoQueryHelper.SampleRowProperty sampleRowProperty =
- builder.initializeForSampleRow(false);
+ CsvWriter writer = null;
+ try {
- TopiaQuery query = builder.applySamplingFilter(filter).
- addOrder(sampleRowProperty.code());
+ DateFormat dateFormat = SAMPLING.getDateFormat();
- List<SampleRow> rows = dao.findAllByQuery(query);
+ File file = File.createTempFile("wao-samplingPlan-", ".csv");
+ file.deleteOnExit();
- NumberFormat numberFormat = SAMPLING.getNumberFormat();
+ FileOutputStream output = new FileOutputStream(file);
+ writer = new CsvWriter(output, ',', context.getCsvCharset());
- for (SampleRow row : rows) {
- export.newRecord();
+ PeriodDates period = filter.getPeriod();
+ period.setPattern(SAMPLING.defaultDatePattern());
+ List<String> monthHeaders = period.getFormatedMonths();
- if (log.isDebugEnabled()) {
- log.debug("add sampleRow : " + row.getCode());
- }
-
- export.record(SAMPLING.PLAN_CODE, row.getCode());
- Company company = row.getCompany();
+ SamplingExport export =
+ new SamplingExport(writer, user, monthHeaders);
- // Evo #2227 : Guest users don't have access to companyName
- if (company != null && !user.isGuest()) {
- export.record(SAMPLING.SOCIETE_NOM, company.getName());
- }
+ export.writeHeaders();
- // Profession can't be null
- Profession profession = row.getProfession();
+ NumberFormat numberFormat = SAMPLING.getNumberFormat();
- // export.record(SAMPLING.METIER_CODE_DCF5, profession.getCodeDCF5());
- export.record(SAMPLING.METIER_CODE_DCF5, StringUtil.join(row.getDCF5Code(), " et ", true));
+ for (SampleRow row : rows) {
+ export.newRecord();
- export.record(SAMPLING.METIER_MAILLAGE, profession.getMeshSize());
- export.record(SAMPLING.METIER_TAILLE, profession.getSize());
- export.record(SAMPLING.METIER_AUTRE, profession.getOther());
- export.record(SAMPLING.METIER_LIBELLE, profession.getLibelle());
- export.record(SAMPLING.METIER_ESPECES, profession.getSpecies());
+ if (log.isDebugEnabled()) {
+ log.debug("add sampleRow : " + row.getCode());
+ }
- export.record(SAMPLING.PROGRAMME_CODE, row.getProgramName());
- export.record(SAMPLING.PROGRAMME_DEBUT, dateFormat.format(row.getPeriodBegin()));
- export.record(SAMPLING.PROGRAMME_FIN, dateFormat.format(row.getPeriodEnd()));
+ export.record(SAMPLING.PLAN_CODE, row.getCode());
+ Company company = row.getCompany();
- export.record(FISHING_ZONE.PECHE_FACADE, row.getFacade());
- export.record(FISHING_ZONE.PECHE_ZONE, row.getSectors());
- export.record(SAMPLING.PECHE_AUTRE, row.getFishingZonesInfos());
+ // Evo #2227 : Guest users don't have access to companyName
+ if (company != null && !user.isGuest()) {
+ export.record(SAMPLING.SOCIETE_NOM, company.getName());
+ }
- String divisions = "";
- String separator = FISHING_ZONE.getDistrictCodeSeparator();
- for (FishingZone zone : row.getFishingZone()) {
- divisions += separator + zone.getDistrictCode();
- }
+ // Profession can't be null
+ Profession profession = row.getProfession();
- // There is at least one district in row, so no problem with substring
- export.record(FISHING_ZONE.PECHE_DIVISION, divisions.substring(separator.length()));
+ // export.record(SAMPLING.METIER_CODE_DCF5, profession.getCodeDCF5());
+ export.record(SAMPLING.METIER_CODE_DCF5, StringUtil.join(row.getDCF5Code(), " et ", true));
- export.record(SAMPLING.PLAN_NB_OBSERV, numberFormat.format(row.getNbObservants()));
- export.record(SAMPLING.PLAN_DUREE_MOY, numberFormat.format(row.getAverageTideTime()));
- if (row.getComment() != null) {
- export.record(SAMPLING.PLAN_COMMENT, String.valueOf(row.getComment()));
- }
- export.record(SAMPLING.PLAN_STRATEGIE, row.getSamplingStrategy().name());
- if (row.getTerrestrialLocation() != null) {
- if (row.getTerrestrialLocation().getDistrictCode() != null) {
- export.record(SAMPLING.PLAN_LIEU_CODE, row.getTerrestrialLocation().getDistrictCode());
- String districtName = row.getTerrestrialLocation().getDistrictName();
- export.record(SAMPLING.PLAN_LIEU_NOM, districtName == null ? "Autre" : districtName);
+ export.record(SAMPLING.METIER_MAILLAGE, profession.getMeshSize());
+ export.record(SAMPLING.METIER_TAILLE, profession.getSize());
+ export.record(SAMPLING.METIER_AUTRE, profession.getOther());
+ export.record(SAMPLING.METIER_LIBELLE, profession.getLibelle());
+ export.record(SAMPLING.METIER_ESPECES, profession.getSpecies());
+
+ export.record(SAMPLING.PROGRAMME_CODE, row.getProgramName());
+ export.record(SAMPLING.PROGRAMME_DEBUT, dateFormat.format(row.getPeriodBegin()));
+ export.record(SAMPLING.PROGRAMME_FIN, dateFormat.format(row.getPeriodEnd()));
+
+ export.record(FISHING_ZONE.PECHE_FACADE, row.getFacade());
+ export.record(FISHING_ZONE.PECHE_ZONE, row.getSectors());
+ export.record(SAMPLING.PECHE_AUTRE, row.getFishingZonesInfos());
+
+ String divisions = "";
+ String separator = FISHING_ZONE.getDistrictCodeSeparator();
+ for (FishingZone zone : row.getFishingZone()) {
+ divisions += separator + zone.getDistrictCode();
}
+
+ // There is at least one district in row, so no problem with substring
+ export.record(FISHING_ZONE.PECHE_DIVISION, divisions.substring(separator.length()));
+
+ export.record(SAMPLING.PLAN_NB_OBSERV, numberFormat.format(row.getNbObservants()));
+ export.record(SAMPLING.PLAN_DUREE_MOY, numberFormat.format(row.getAverageTideTime()));
+ if (row.getComment() != null) {
+ export.record(SAMPLING.PLAN_COMMENT, String.valueOf(row.getComment()));
+ }
+ export.record(SAMPLING.PLAN_STRATEGIE, row.getSamplingStrategy().name());
+ if (row.getTerrestrialLocation() != null) {
+ if (row.getTerrestrialLocation().getDistrictCode() != null) {
+ export.record(SAMPLING.PLAN_LIEU_CODE, row.getTerrestrialLocation().getDistrictCode());
+ String districtName = row.getTerrestrialLocation().getDistrictName();
+ export.record(SAMPLING.PLAN_LIEU_NOM, districtName == null ? "Autre" : districtName);
+ }
+ }
+
+ export.recordMonths(row);
+
+ export.writeRecord();
}
- export.recordMonths(row);
+ csv = new FileInputStream(file);
- export.writeRecord();
+ } catch (Exception eee) {
+ throw eee;
+ } finally {
+ if (writer != null) {
+ writer.close();
+ }
}
-
- return new FileInputStream(file);
-
- } catch (Exception eee) {
- throw eee;
- } finally {
- if (writer != null) {
- writer.close();
- }
}
-
+
+ return csv;
}
@Override
@@ -1074,7 +1058,7 @@
throw new IllegalStateException("Le référentiel de stratification n'a pas été importé");
}
- SamplingPlanImportModel samplingPlanImportModel = new SamplingPlanImportModel(observationUnits);
+ SamplingPlanImportExportModel samplingPlanImportModel = new SamplingPlanImportExportModel(observationUnits);
try {
Import<SampleRow> samplingPlanImport = new Import<SampleRow>(samplingPlanImportModel, input);
@@ -1256,7 +1240,7 @@
* Update a SampleRow from CSV File from importSamplingPlanCsv method.
* Program must be set to get beginDate and endDate for getting correct months.
* SampleMonth will be created corresponding to program period.
- * Careful : fixed columns set to 16 and months columns start to 13.
+ * Careful : fixed columnsForImport set to 16 and months columnsForImport start to 13.
* The case of importing a previously exported file is Ok (the default
* values is check from SAMPLING header).
* Updatable fields : fishingZoneInfos, nbObservants, averageTideTime,
@@ -1337,13 +1321,13 @@
- // 16 fixed columns : 13 before months and 4 after
+ // 16 fixed columnsForImport : 13 before months and 4 after
int nbFixedColumns = 17;
// Months begin at 14th column
int firstMonthColumnId = 13;
int nbTotalColumns = reader.getColumnCount();
- // Case for importing CSV after exporting from appli : more columns
+ // Case for importing CSV after exporting from appli : more columnsForImport
// are exported.
// Check if the previous column (12) is the lastHeader
// defined in SAMPLING
Added: trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ExportTest.java
===================================================================
--- trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ExportTest.java (rev 0)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ExportTest.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -0,0 +1,85 @@
+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 fr.ifremer.wao.entity.TerrestrialDivision;
+import fr.ifremer.wao.entity.TerrestrialDivisionImpl;
+import fr.ifremer.wao.io.csv2.models.SamplingPlanImportExportModel;
+import org.apache.commons.io.IOUtils;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.nuiton.util.DateUtil;
+import org.nuiton.util.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.LinkedList;
+
+public class ExportTest {
+
+ private static final Logger log = LoggerFactory.getLogger(ExportTest.class);
+
+ protected Collection<SampleRow> sampleRows;
+
+ @Before
+ public void fillSampleRows() {
+ TerrestrialDivision observationUnit = new TerrestrialDivisionImpl();
+ observationUnit.setObservationUnitCode("UO10");
+ observationUnit.setRegionIfremerCode("MA");
+ observationUnit.setObservationUnitName("Côte est");
+
+ SampleRow row1 = new SampleRowImpl();
+ row1.setObsProgram(ObsProgram.OBSDEB);
+ row1.setCode("1");
+ row1.setDay(DateUtil.createDate(11, 3, 2011));
+ row1.setGroupName("OBS1");
+ row1.setObservationUnit(observationUnit);
+
+ SampleRow row2 = new SampleRowImpl();
+ row2.setObsProgram(ObsProgram.OBSDEB);
+ row2.setCode("2");
+ row2.setDay(DateUtil.createDate(12, 3, 2011));
+ row2.setGroupName("OBS2");
+ row2.setObservationUnit(observationUnit);
+
+ sampleRows = new LinkedList<SampleRow>();
+ sampleRows.add(row1);
+ sampleRows.add(row2);
+ }
+
+ @Test
+ public void testExport() throws Exception {
+ ExportModel<SampleRow> exportModel = new SamplingPlanImportExportModel();
+ Export<SampleRow> export = new Export(exportModel, sampleRows);
+ InputStream input = null;
+
+ try {
+ input = export.startExport();
+
+ String csv = IOUtils.toString(input);
+
+ if (log.isDebugEnabled()) {
+ log.debug("csv file is : \n" + csv);
+ }
+
+ // check the no line is missing
+ String[] lines = StringUtil.split(csv, "\n");
+ int expectedLineNumber = sampleRows.size() + 1; // +1 for header line
+ int actualLineNumber = lines.length;
+ Assert.assertEquals(expectedLineNumber, actualLineNumber);
+
+ // check that each lines has 5 columns
+ for (String line : lines) {
+ String[] columns = StringUtil.split(line, ";");
+ Assert.assertEquals(5, columns.length);
+ }
+ } finally {
+ IOUtils.closeQuietly(input);
+ }
+ }
+
+}
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-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -20,17 +20,15 @@
*/
package fr.ifremer.wao.io.csv2;
-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.SamplingPlanImportExportModel;
import fr.ifremer.wao.io.csv2.models.TerrestrialLocationImportModel;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
-import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -96,7 +94,7 @@
terrestrialDivisions.add(uo07);
terrestrialDivisions.add(uo87);
- ImportModel<SampleRow> model = new SamplingPlanImportModel(terrestrialDivisions);
+ ImportModel<SampleRow> model = new SamplingPlanImportExportModel(terrestrialDivisions);
InputStream input = null;
try {
input = getClass().getResourceAsStream("/import/samplingPlan-obsdeb.csv");
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/IndicatorLevels.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/IndicatorLevels.java 2011-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/IndicatorLevels.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -31,7 +31,7 @@
import java.util.List;
/**
- * Render a table with levels as columns and two lines : level number and
+ * Render a table with levels as columnsForImport and two lines : level number and
* lower + upper bound values. The table has a header with indicator name
* and coefficient
*
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/AbstractMappedGridDataSource.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/AbstractMappedGridDataSource.java 2011-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/AbstractMappedGridDataSource.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -85,7 +85,7 @@
mapResults = execute(startIndex, endIndex, getSortConstraint(sortConstraints));
listResults = new ArrayList<E>(mapResults.values());
- // FIXME manage sort columns in execute ???? seems obvious --> needed for Contacts, done for Boats
+ // FIXME manage sort columnsForImport in execute ???? seems obvious --> needed for Contacts, done for Boats
//sortResults(sortConstraints);
} catch (WaoException eee) {
throw new TapestryException("", eee);
Modified: 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 2011-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -1,16 +1,19 @@
package fr.ifremer.wao.ui.pages;
+import fr.ifremer.wao.WaoException;
import fr.ifremer.wao.bean.ConnectedUser;
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.ExportStreamResponse;
import fr.ifremer.wao.ui.data.RequiresAuthentication;
import fr.ifremer.wao.ui.data.SampleRowDataSource;
import fr.ifremer.wao.ui.services.SampleRowModelFactory;
import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.beaneditor.BeanModel;
@@ -18,6 +21,9 @@
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.BeanModelSource;
+import java.io.IOException;
+import java.io.InputStream;
+
@RequiresAuthentication(allowedPrograms = {ObsProgram.OBSDEB})
public class ObsDebSamplingPlan {
@@ -69,4 +75,21 @@
}
return obsdebSamplingPlanModel;
}
+
+ /********** ACTIONS *********/
+
+ StreamResponse onActionFromExportSamplingPlan() {
+ return new ExportStreamResponse("wao-echantillonnage-obsdeb") {
+ @Override
+ public InputStream getStream() throws IOException {
+ InputStream csv = null;
+ try {
+ csv = serviceSampling.exportSamplingPlanCsv(connectedUser, getSamplingFilter());
+ } catch (WaoException eee) {
+ throw new IOException(eee);
+ }
+ return csv;
+ }
+ };
+ }
}
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java 2011-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ContactModelFactory.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -74,7 +74,7 @@
/** add ALL properties to the bean model. */
protected void initModel() {
- // order is meaningful, properties will be displayed in columns from left to right
+ // order is meaningful, properties will be displayed in columnsForImport from left to right
addNonSortableProperty(TopiaEntity.TOPIA_CREATE_DATE, null);
addNonSortableProperty(Contact.PROPERTY_MAIN_OBSERVER, getUserPropertyConduit());
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/SampleRowModelFactory.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/SampleRowModelFactory.java 2011-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/SampleRowModelFactory.java 2011-03-11 17:30:31 UTC (rev 1059)
@@ -15,7 +15,7 @@
* Used to generate a bean model for the grid used in sampling plan showed
* on page {@link fr.ifremer.wao.ui.pages.ObsDebSamplingPlan}.
*
- * This factory will generate a model showing the columns that the user
+ * This factory will generate a model showing the columnsForImport that the user
* has the right to see.
*
* @author bleny
Modified: trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml
===================================================================
--- trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml 2011-03-10 15:48:59 UTC (rev 1058)
+++ trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml 2011-03-11 17:30:31 UTC (rev 1059)
@@ -1,7 +1,14 @@
<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">
- <h1>${message:wao.ui.samplingPlan.title}</h1>
+ <h1 class="fleft">${message:wao.ui.samplingPlan.title}</h1>
+ <div class="fleft actions-top">
+ <span>
+ <a t:type="actionlink" t:id="exportSamplingPlan"> <!-- title="${format:wao.ui.samplingPlan.export=dateFormat.format(period.fromDate),dateFormat.format(period.thruDate)}" -->
+ <img src="${asset:context:}/img/file-export-22px.png" alt="${message:wao.ui.action.runExport}" />
+ </a>
+ </span>
+ </div>
<div t:type="grid" t:source="sampleRows" t:row="sampleRow" t:model="obsdebSamplingPlanModel" t:rowsPerPage="50">
<!-- code -->
1
0
[Suiviobsmer-commits] r1058 - in trunk: wao-business/src/main/java/fr/ifremer/wao/bean wao-business/src/main/java/fr/ifremer/wao/entity wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/main/xmi wao-business/src/test/java/fr/ifremer/wao/service wao-business/src/test/resources wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/webapp
by bleny@users.labs.libre-entreprise.org 10 Mar '11
by bleny@users.labs.libre-entreprise.org 10 Mar '11
10 Mar '11
Author: bleny
Date: 2011-03-10 15:48:59 +0000 (Thu, 10 Mar 2011)
New Revision: 1058
Log:
ObsVente : cutting sampling plan on fishing zones, like ObsMer
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/bean/FacadeRowImpl.java
trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialLocationImpl.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/xmi/wao.zargo
trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java
trunk/wao-business/src/test/resources/log4j.properties
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java
trunk/wao-ui/src/main/webapp/SamplingPlan.tml
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/FacadeRowImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/FacadeRowImpl.java 2011-03-10 11:06:23 UTC (rev 1057)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/FacadeRowImpl.java 2011-03-10 15:48:59 UTC (rev 1058)
@@ -50,17 +50,8 @@
@Override
public void addRow(SampleRow row) {
- String facade = null;
- String sectors = null;
- if (row.getObsProgram() == ObsProgram.OBSMER) {
- facade = row.getFacade();
- sectors = row.getSectors();
- } else if (row.getObsProgram() == ObsProgram.OBSVENTE) {
- facade = row.getTerrestrialLocation().getCoastFAOName();
- sectors = row.getTerrestrialLocation().getCountryName();
- } else {
- throw new IllegalArgumentException("obsProgram " + row.getObsProgram());
- }
+ String facade = row.getFacade();
+ String sectors = row.getSectors();
// Prepare sectors Map
Map<String, List<SampleRow>> sectorMap = getData().get(facade);
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-10 11:06:23 UTC (rev 1057)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialLocationImpl.java 2011-03-10 15:48:59 UTC (rev 1058)
@@ -22,7 +22,6 @@
import fr.ifremer.wao.WaoUtils;
import fr.ifremer.wao.bean.LocationType;
-import org.apache.commons.lang.ObjectUtils;
import static org.nuiton.i18n.I18n.n_;
@@ -53,18 +52,10 @@
@Override
public boolean isDistrict() {
- boolean isDistrict = getLocationType() == null
- && getDistrictCode() != null;
+ boolean isDistrict = getLocationType() == null;
return isDistrict;
}
- @Override
- public boolean isRegion() {
- boolean isRegion = getLocationType() == null
- && getDistrictCode() == null;
- return isRegion;
- }
-
/** Get a description of the location like « Maracaibo (Port, Venezuela) »
*
*/
@@ -75,6 +66,8 @@
} else {
description.append(getName()).append(" (")
.append(getLocationType()).append(", ");
+ // add the port name only if it's different of the name
+ // because most of the time it's redundant
if (getPortName() != null && ! getPortName().equals(getName())) {
description.append(getPortName()).append(", ");
}
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-10 11:06:23 UTC (rev 1057)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-03-10 15:48:59 UTC (rev 1058)
@@ -384,6 +384,7 @@
district.setSeaboardName(null);
district.setCoastFAOCode(null);
district.setCoastFAOName(null);
+ district.setDistrictCode(null);
}
// now, we have the 'district' object we want to have in the
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-10 11:06:23 UTC (rev 1057)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-10 15:48:59 UTC (rev 1058)
@@ -294,6 +294,16 @@
dao.create(row);
} else {
+ // check that code is not already used in another program
+ if ( ! row.getObsProgram().equals(oldRow.getObsProgram())) {
+ if (log.isDebugEnabled()) {
+ log.error("Unable to save sample row. Code " + row.getCode() +
+ " is already used in program " + oldRow.getObsProgram());
+ }
+ throw new IllegalArgumentException("code " + row.getCode() +
+ " is already used in program " + oldRow.getObsProgram());
+ }
+
// it's the modification of a row, we must compute the
// difference between before and after add this to the
// sample row historic
@@ -561,14 +571,11 @@
WaoQueryHelper.FishingZoneProperty fishingZoneProperty =
builder.getFishingZoneProperty();
-
// Depending on the program, the sampling plan is not organised
// the same way. In Obsmer, lines are cut by Facade, sector
// In ObsVente, it's by terrestrial location
- if (filter.getObsProgram() == ObsProgram.OBSMER) {
-
- query.setSelect(sampleRowProperty.$alias(),
+ query.setSelect(sampleRowProperty.$alias(),
fishingZoneProperty.facadeName(),
fishingZoneProperty.sectorName(),
fishingZoneProperty.districtCode()).
@@ -579,23 +586,12 @@
fishingZoneProperty.sectorName(),
fishingZoneProperty.districtCode(),
sampleRowProperty.code());
- } else if (filter.getObsProgram() == ObsProgram.OBSVENTE) {
+
+ if (filter.getObsProgram() == ObsProgram.OBSVENTE) {
WaoQueryHelper.TerrestrialLocationProperty terrestrialLocationProperty =
WaoQueryHelper.newTerrestrialLocationProperty();
- query.setSelect(sampleRowProperty.$alias(),
- terrestrialLocationProperty.coastFAOName(),
- terrestrialLocationProperty.countryName()).
- // we still need to join to fishing zone for filters
- addLeftJoin(sampleRowProperty.fishingZone(), fishingZoneProperty.$alias(), false).
- addLeftJoin(sampleRowProperty.terrestrialLocation(), terrestrialLocationProperty.$alias(), false).
- addLeftJoin(sampleRowProperty.dCF5Code(), dcf5CodeProperty.$alias(), false).
- // Order By terrestrial location
- addOrder(terrestrialLocationProperty.coastFAOName(),
- terrestrialLocationProperty.countryName(),
- sampleRowProperty.code());
- } else {
- throw new IllegalArgumentException("obsProgram " + filter.getObsProgram());
+ query.addLeftJoin(sampleRowProperty.terrestrialLocation(), terrestrialLocationProperty.$alias(), false);
}
if (log.isDebugEnabled()) {
@@ -607,7 +603,11 @@
List<SampleRow> results = dao.findAllByQuery(query);
for (SampleRow row : results) {
- row.sizeSampleRowLog(); // force load
+ // force load
+ row.sizeSampleRowLog();
+ if (row.getObsProgram().equals(ObsProgram.OBSVENTE)) {
+ row.getTerrestrialLocation();
+ }
// use FacadeRow to complete ordering using maps
result.addRow(row);
@@ -1130,7 +1130,7 @@
String code = ImportHelper.readSampleRowCode(reader); //reader.get(SAMPLING.PLAN_CODE.name()).trim();
if (StringUtils.isEmpty(code)) {
- continue;
+ code = executeGetNewSampleRowCode(transaction, context.getCurrentDate());
}
errorArgs.set(0, currRow);
Modified: trunk/wao-business/src/main/xmi/wao.zargo
===================================================================
(Binary files differ)
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-10 11:06:23 UTC (rev 1057)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceSamplingImplTest.java 2011-03-10 15:48:59 UTC (rev 1058)
@@ -700,10 +700,15 @@
filter.setObsProgram(ObsProgram.OBSDEB);
List<SampleRow> samplingPlan = serviceSampling.getSampleRowsByFilter(filter);
for (SampleRow sampleRow : samplingPlan) {
+
+ if (log.isDebugEnabled()) {
+ log.debug("sample row has code " + sampleRow.getCode());
+ }
+
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.assertNotNull("all sample rows must be attached to a port", sampleRow.getObservationUnit().isObservationUnit());
}
Assert.assertEquals("there is two line to import", 2, samplingPlan.size());
Modified: trunk/wao-business/src/test/resources/log4j.properties
===================================================================
--- trunk/wao-business/src/test/resources/log4j.properties 2011-03-10 11:06:23 UTC (rev 1057)
+++ trunk/wao-business/src/test/resources/log4j.properties 2011-03-10 15:48:59 UTC (rev 1058)
@@ -31,6 +31,6 @@
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%p] %c{2} %m%n
-log4j.logger.fr.ifremer.wao=INFO
+log4j.logger.fr.ifremer.wao=DEBUG
log4j.logger.org.nuiton.util=INFO
log4j.logger.org.nuiton.util.beans.BinderProvider=ERROR
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-10 11:06:23 UTC (rev 1057)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2011-03-10 15:48:59 UTC (rev 1058)
@@ -326,18 +326,9 @@
@Log
public boolean isFacadeChanged() {
boolean facadeChanged = false;
- if (row.getObsProgram().equals(ObsProgram.OBSMER)) {
- if (!row.getFacade().equals(currentFacadeName)) {
- currentFacadeName = row.getFacade();
- facadeChanged = true;
- }
- } else if (row.getObsProgram().equals(ObsProgram.OBSVENTE)) {
- if (!row.getTerrestrialLocation().getCoastFAOName().equals(currentFacadeName)) {
- currentFacadeName = row.getTerrestrialLocation().getCoastFAOName();
- facadeChanged = true;
- }
- } else {
- throw new IllegalArgumentException("obsProgram " + row.getObsProgram());
+ if (!row.getFacade().equals(currentFacadeName)) {
+ currentFacadeName = row.getFacade();
+ facadeChanged = true;
}
if (facadeChanged) {
@@ -352,18 +343,9 @@
@Log
public boolean isSectorChanged() {
boolean sectorChanged = false;
- if (row.getObsProgram().equals(ObsProgram.OBSMER)) {
- if (!row.getSectors().equals(currentSectorName)) {
- currentSectorName = row.getSectors();
- sectorChanged = true;
- }
- } else if (row.getObsProgram().equals(ObsProgram.OBSVENTE)) {
- if (!row.getTerrestrialLocation().getCountryName().equals(currentSectorName)) {
- currentSectorName = row.getTerrestrialLocation().getCountryName();
- sectorChanged = true;
- }
- } else {
- throw new IllegalArgumentException("obsProgram " + row.getObsProgram());
+ if (!row.getSectors().equals(currentSectorName)) {
+ currentSectorName = row.getSectors();
+ sectorChanged = true;
}
return sectorChanged;
}
Modified: trunk/wao-ui/src/main/webapp/SamplingPlan.tml
===================================================================
--- trunk/wao-ui/src/main/webapp/SamplingPlan.tml 2011-03-10 11:06:23 UTC (rev 1057)
+++ trunk/wao-ui/src/main/webapp/SamplingPlan.tml 2011-03-10 15:48:59 UTC (rev 1058)
@@ -243,9 +243,11 @@
<td>${row.fishingZonesInfos}</td>
<t:if test="user.obsVente">
<td>
- <span t:type="ck/Tooltip" title="Infos" t:value="${row.terrestrialLocation.description}" t:effect="appear">
- ${row.terrestrialLocation.districtName}
- </span>
+ <t:if test="row.terrestrialLocation">
+ <span t:type="ck/Tooltip" title="Infos" t:value="${row.terrestrialLocation.description}" t:effect="appear">
+ ${row.terrestrialLocation.districtName}
+ </span>
+ </t:if>
</td>
<td>
${row.terrestrialLocationInfos}
@@ -273,9 +275,11 @@
</td>
<t:if test="user.obsVente">
<td>
- <span t:type="ck/Tooltip" title="Infos" t:value="${row.terrestrialLocation.description}" t:effect="appear">
- ${row.terrestrialLocation.districtName}
- </span>
+ <t:if test="row.terrestrialLocation">
+ <span t:type="ck/Tooltip" title="Infos" t:value="${row.terrestrialLocation.description}" t:effect="appear">
+ ${row.terrestrialLocation.districtName}
+ </span>
+ </t:if>
</td>
<td>
${row.terrestrialLocationInfos}
1
0
[Suiviobsmer-commits] r1057 - in trunk: wao-business/src/main/java/fr/ifremer/wao/entity wao-business/src/main/java/fr/ifremer/wao/service wao-ui/src/main/java/fr/ifremer/wao/ui/pages
by bleny@users.labs.libre-entreprise.org 10 Mar '11
by bleny@users.labs.libre-entreprise.org 10 Mar '11
10 Mar '11
Author: bleny
Date: 2011-03-10 11:06:23 +0000 (Thu, 10 Mar 2011)
New Revision: 1057
Log:
fix minor issues
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java
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-09 14:24:18 UTC (rev 1056)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java 2011-03-10 11:06:23 UTC (rev 1057)
@@ -399,15 +399,17 @@
@Override
public String getProfessionDescriptionWithoutDCF5() {
String code = "";
- if (!StringUtils.isEmpty(getProfession().getMeshSize())) {
- code += " " + getProfession().getMeshSize();
+ if (getProfession() != null) {
+ if (!StringUtils.isEmpty(getProfession().getMeshSize())) {
+ code += " " + getProfession().getMeshSize();
+ }
+ if (!StringUtils.isEmpty(getProfession().getSize())) {
+ code += " " + getProfession().getSize();
+ }
+ if (!StringUtils.isEmpty(getProfession().getOther())) {
+ code += " " + getProfession().getOther();
+ }
}
- if (!StringUtils.isEmpty(getProfession().getSize())) {
- code += " " + getProfession().getSize();
- }
- if (!StringUtils.isEmpty(getProfession().getOther())) {
- code += " " + getProfession().getOther();
- }
return code;
}
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-09 14:24:18 UTC (rev 1056)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-10 11:06:23 UTC (rev 1057)
@@ -147,10 +147,6 @@
context.closeTransaction(transaction);
}
-// public ServiceSamplingImpl() {
-// prepareBinderForProfession();
-// }
-
/** given a collection of DCFCode (mixing some taken from DB and some
* other insciated), return the same collection but assure that all elements
* are now in the database.
Modified: 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 2011-03-09 14:24:18 UTC (rev 1056)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java 2011-03-10 11:06:23 UTC (rev 1057)
@@ -7,6 +7,7 @@
import fr.ifremer.wao.bean.SamplingFilterImpl;
import fr.ifremer.wao.entity.SampleRow;
import fr.ifremer.wao.service.ServiceSampling;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import fr.ifremer.wao.ui.data.SampleRowDataSource;
import fr.ifremer.wao.ui.services.SampleRowModelFactory;
import org.apache.tapestry5.ComponentResources;
@@ -17,6 +18,7 @@
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.BeanModelSource;
+ at RequiresAuthentication(allowedPrograms = {ObsProgram.OBSDEB})
public class ObsDebSamplingPlan {
/********* Tapestry stuffs **********/
1
0
[Suiviobsmer-commits] r1056 - in trunk/wao-business/src/main: java/fr/ifremer/wao java/fr/ifremer/wao/entity java/fr/ifremer/wao/io/csv2/models java/fr/ifremer/wao/service xmi
by bleny@users.labs.libre-entreprise.org 09 Mar '11
by bleny@users.labs.libre-entreprise.org 09 Mar '11
09 Mar '11
Author: bleny
Date: 2011-03-09 14:24:18 +0000 (Wed, 09 Mar 2011)
New Revision: 1056
Log:
add UO when importing terrestrial divisions ; update sampling plan import
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java
trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.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/java/fr/ifremer/wao/service/ServiceSamplingImpl.java
trunk/wao-business/src/main/xmi/wao.zargo
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-08 16:18:29 UTC (rev 1055)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2011-03-09 14:24:18 UTC (rev 1056)
@@ -806,7 +806,7 @@
"observationUnitCode CHARACTER VARYING(255)," +
"observationUnitName CHARACTER VARYING(255)," +
"regionIfremerCode CHARACTER VARYING(255)," +
- "port CHARACTER VARYING(255) NOT NULL," +
+ "port CHARACTER VARYING(255)," +
"CONSTRAINT port_fkey FOREIGN KEY (port) " +
"REFERENCES TerrestrialLocation (topiaid));");
}
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java 2011-03-08 16:18:29 UTC (rev 1055)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java 2011-03-09 14:24:18 UTC (rev 1056)
@@ -1,11 +1,21 @@
package fr.ifremer.wao.entity;
-public class TerrestrialDivisionImpl extends TerrestrialDivisionAbstract {
+public class TerrestrialDivisionImpl extends TerrestrialDivisionAbstract {
@Override
+ public boolean isObservationUnit() {
+ return getCode() == null && getPort() == null;
+ }
+
+ @Override
public String toString() {
- String toString = getObservationUnitCode() + " - " + getObservationUnitName();
- toString += "||" + getPort().getPortName();
+ String toString;
+ if (isObservationUnit()) {
+ toString = getRegionIfremerCode() + "-" + getObservationUnitCode()
+ + " " + getObservationUnitName();
+ } else {
+ toString = getPort().getPortName();
+ }
return toString;
}
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-08 16:18:29 UTC (rev 1055)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/models/SamplingPlanImportModel.java 2011-03-09 14:24:18 UTC (rev 1056)
@@ -93,23 +93,23 @@
}
/** region ifremer code -> UO code -> TerrestrialDivision */
- protected Map<String, Map<String, TerrestrialDivision>> observationUnits;
+ protected Map<String, Map<String, TerrestrialDivision>> indexedObservationUnits;
- public SamplingPlanImportModel(List<TerrestrialDivision> terrestrialDivisions) {
+ public SamplingPlanImportModel(List<TerrestrialDivision> observationUnits) {
- observationUnits = new HashMap<String, Map<String, TerrestrialDivision>>();
- for (TerrestrialDivision terrestrialDivision : terrestrialDivisions) {
+ indexedObservationUnits = new HashMap<String, Map<String, TerrestrialDivision>>();
+ for (TerrestrialDivision terrestrialDivision : observationUnits) {
String regionCode = terrestrialDivision.getRegionIfremerCode();
- Map<String, TerrestrialDivision> unitCodesToDivision = observationUnits.get(regionCode);
+ Map<String, TerrestrialDivision> unitCodesToDivision = indexedObservationUnits.get(regionCode);
if (unitCodesToDivision == null) {
unitCodesToDivision = new HashMap<String, TerrestrialDivision>();
}
unitCodesToDivision.put(terrestrialDivision.getObservationUnitCode(), terrestrialDivision);
- observationUnits.put(regionCode, unitCodesToDivision);
+ indexedObservationUnits.put(regionCode, unitCodesToDivision);
}
if (log.isDebugEnabled()) {
- for (Map.Entry<String, Map<String, TerrestrialDivision>> entry : observationUnits.entrySet()) {
+ for (Map.Entry<String, Map<String, TerrestrialDivision>> entry : indexedObservationUnits.entrySet()) {
log.debug(entry.getKey());
for (Map.Entry<String, TerrestrialDivision> unitCodesToDivision : entry.getValue().entrySet()) {
log.debug(" -> " + unitCodesToDivision.getKey() + " -> " + unitCodesToDivision.getValue());
@@ -148,7 +148,7 @@
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);
+ ObservationUnitParser observationUnitParser = new ObservationUnitParser(indexedObservationUnits);
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));
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-08 16:18:29 UTC (rev 1055)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceReferentialImpl.java 2011-03-09 14:24:18 UTC (rev 1056)
@@ -25,6 +25,7 @@
package fr.ifremer.wao.service;
import com.csvreader.CsvReader;
+import fr.ifremer.wao.WaoBinderHelper;
import fr.ifremer.wao.WaoBusinessException;
import fr.ifremer.wao.WaoContext;
import fr.ifremer.wao.WaoDAOHelper;
@@ -614,7 +615,23 @@
try {
Iterator<TerrestrialDivision> terrestrialDivisionIterator = terrestrialDivisionImport.startImport();
- WaoUtils.createOrUpdate(TerrestrialDivision.class, terrestrialDivisionIterator, dao, TerrestrialDivision.PROPERTY_CODE);
+ Binder<TerrestrialDivision, TerrestrialDivision> observationUnitBinder = BinderFactory.newBinder(TerrestrialDivision.class);
+
+ while (terrestrialDivisionIterator.hasNext()) {
+ TerrestrialDivision terrestrialDivision = terrestrialDivisionIterator.next();
+ WaoUtils.createOrUpdate(TerrestrialDivision.class, terrestrialDivision, dao, TerrestrialDivision.PROPERTY_CODE);
+
+ // now add an observation unit
+ TerrestrialDivision observationUnit = dao.newInstance();
+ observationUnitBinder.copyExcluding(terrestrialDivision, observationUnit,
+ TerrestrialDivision.TOPIA_ID, TerrestrialDivision.TOPIA_VERSION, TerrestrialDivision.TOPIA_CREATE_DATE,
+ TerrestrialDivision.PROPERTY_CODE, TerrestrialDivision.PROPERTY_PORT);
+ WaoUtils.createOrUpdate(TerrestrialDivision.class, observationUnit, dao, TerrestrialDivision.PROPERTY_CODE,
+ TerrestrialDivision.PROPERTY_SKILL_ZONE_CODE, TerrestrialDivision.PROPERTY_SUB_POPULATION_CODE,
+ TerrestrialDivision.PROPERTY_OBSERVATION_UNIT_CODE, TerrestrialDivision.PROPERTY_PORT);
+ }
+
+ transaction.commitTransaction();
} catch (Exception e) {
transaction.rollbackTransaction();
throw e;
@@ -622,5 +639,9 @@
terrestrialDivisionImport.stopImport();
}
+ if (log.isDebugEnabled()) {
+ log.debug(dao.count() + " terrestrial divisions in database");
+ }
+
}
}
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-08 16:18:29 UTC (rev 1055)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-09 14:24:18 UTC (rev 1056)
@@ -79,6 +79,7 @@
import fr.ifremer.wao.io.csv.WaoCsvHeader.SAMPLING;
import fr.ifremer.wao.io.csv2.Import;
import fr.ifremer.wao.io.csv2.models.SamplingPlanImportModel;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.mail.EmailException;
@@ -259,7 +260,31 @@
SampleRow oldRow = null;
if (row.getCode() == null) {
- String code = executeGetNewSampleRowCode(transaction, context.getCurrentDate());
+ // all rows must have a unique code, the code has a year as prefix
+ // like '2011_' so we must know on which year the row is active
+
+ // the date from which year will be extracted (whatever the day of the year)
+ Date year;
+
+ if (ObsProgram.OBSDEB.equals(row.getObsProgram())) {
+ // this line has a precise day, let's take the
+ // year of this day
+ year = row.getDay();
+ } else {
+ if (CollectionUtils.isEmpty(row.getSampleMonth())) {
+ // if the row has no sample months, we can't know
+ // we take current year by default
+ year = context.getCurrentDate();
+ } else {
+ // if the row has sample months, take the first month
+ year = row.getSampleMonth().get(0).getPeriodDate();
+ }
+ }
+
+ // now we have the year for prefix, let's get the whole new
+ // code (suffix depends on already used codes)
+ String code = executeGetNewSampleRowCode(transaction, year);
+
row.setCode(code);
} else {
oldRow = getSampleRowByCode(null, row.getCode());
@@ -272,16 +297,28 @@
}
dao.create(row);
} else {
+
+ // it's the modification of a row, we must compute the
+ // difference between before and after add this to the
+ // sample row historic
+
+ // first, compute the difference
rowLog.setLogText(oldRow, row);
+ // update the row by copying the new data in the old entity
+ // taking care to not remove any sample row log entries
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);
+ // old logs (whole historic) is kept by not erasing this property
+ SampleRow.PROPERTY_SAMPLE_ROW_LOG);
if (rowLog.getTopiaId() == null) {
context.prepareTopiaId(SampleRowLog.class, rowLog);
}
+
+ // attach the new log entry to the updated row
row.addSampleRowLog(rowLog);
+
dao.update(oldRow);
}
@@ -1034,13 +1071,14 @@
ImportResults result = new ImportResultsImpl();
if (ObsProgram.OBSDEB.equals(obsProgram)) {
TerrestrialDivisionDAO terrestrialDivisionDAO = WaoDAOHelper.getTerrestrialDivisionDAO(transaction);
- List<TerrestrialDivision> terrestrialDivisions = terrestrialDivisionDAO.findAll();
- if (terrestrialDivisions.isEmpty()) {
+ List<TerrestrialDivision> observationUnits = terrestrialDivisionDAO.findAllByPort(null);
+
+ if (observationUnits.isEmpty()) {
throw new IllegalStateException("Le référentiel de stratification n'a pas été importé");
}
- SamplingPlanImportModel samplingPlanImportModel = new SamplingPlanImportModel(terrestrialDivisions);
+ SamplingPlanImportModel samplingPlanImportModel = new SamplingPlanImportModel(observationUnits);
try {
Import<SampleRow> samplingPlanImport = new Import<SampleRow>(samplingPlanImportModel, input);
Modified: trunk/wao-business/src/main/xmi/wao.zargo
===================================================================
(Binary files differ)
1
0
[Suiviobsmer-commits] r1055 - in trunk: wao-business/src/main/java/fr/ifremer/wao wao-business/src/main/java/fr/ifremer/wao/entity wao-business/src/main/java/fr/ifremer/wao/service wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/java/fr/ifremer/wao/ui/services wao-ui/src/main/resources/i18n wao-ui/src/main/webapp
by bleny@users.labs.libre-entreprise.org 08 Mar '11
by bleny@users.labs.libre-entreprise.org 08 Mar '11
08 Mar '11
Author: bleny
Date: 2011-03-08 16:18:29 +0000 (Tue, 08 Mar 2011)
New Revision: 1055
Log:
better sampling plan layout in UI
Added:
trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/SampleRowModelFactory.java
Modified:
trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.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/ObsDebSamplingPlan.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-07 17:15:10 UTC (rev 1054)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoUtils.java 2011-03-08 16:18:29 UTC (rev 1055)
@@ -24,8 +24,6 @@
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;
Added: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java (rev 0)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/TerrestrialDivisionImpl.java 2011-03-08 16:18:29 UTC (rev 1055)
@@ -0,0 +1,12 @@
+package fr.ifremer.wao.entity;
+
+public class TerrestrialDivisionImpl extends TerrestrialDivisionAbstract {
+
+ @Override
+ public String toString() {
+ String toString = getObservationUnitCode() + " - " + getObservationUnitName();
+ toString += "||" + getPort().getPortName();
+ return toString;
+ }
+
+}
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-07 17:15:10 UTC (rev 1054)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceSamplingImpl.java 2011-03-08 16:18:29 UTC (rev 1055)
@@ -1043,24 +1043,24 @@
SamplingPlanImportModel samplingPlanImportModel = new SamplingPlanImportModel(terrestrialDivisions);
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();
+ SampleRow sampleRow = null;
+ try {
+ sampleRow = it.next();
+ sampleRow.clearSampleMonth();
- SampleRowLog sampleRowLog = executeGetNewSampleRowLog(sampleRow, connectedUser);
-
- try {
- // WaoUtils.createOrUpdate(SampleRow.class, sampleRow, dao, SampleRow.PROPERTY_OBS_PROGRAM_ORDINAL, SampleRow.PROPERTY_CODE);
+ SampleRowLog sampleRowLog = executeGetNewSampleRowLog(sampleRow, connectedUser);
executeCreateUpdateSampleRow(transaction, sampleRow, new ArrayList<Boat>(), sampleRowLog);
} catch (Exception e) {
errorArgs.add(-1);
- errorArgs.add(sampleRow.getCode());
+ errorArgs.add(sampleRow == null ? "" : sampleRow.getCode());
//errorArgs.add(e.getMessage());
+ transaction.rollbackTransaction();
throw new ImportRefusedException(e.getMessage(), -1, "field", e);
}
+
}
transaction.commitTransaction();
} finally {
Modified: 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 2011-03-07 17:15:10 UTC (rev 1054)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ObsDebSamplingPlan.java 2011-03-08 16:18:29 UTC (rev 1055)
@@ -1,14 +1,17 @@
package fr.ifremer.wao.ui.pages;
+import fr.ifremer.wao.bean.ConnectedUser;
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 fr.ifremer.wao.ui.services.SampleRowModelFactory;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.beaneditor.BeanModel;
import org.apache.tapestry5.grid.GridDataSource;
import org.apache.tapestry5.ioc.annotations.Inject;
@@ -27,7 +30,12 @@
@Inject
private ServiceSampling serviceSampling;
+ /********* Session ************/
+ @SessionState
+ @Property
+ private ConnectedUser connectedUser;
+
/********* FILTERS ********/
public SamplingFilter getSamplingFilter() {
@@ -54,9 +62,8 @@
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);
+ SampleRowModelFactory sampleRowModelFactory = new SampleRowModelFactory(beanModelSource, resources, connectedUser);
+ obsdebSamplingPlanModel = sampleRowModelFactory.newModel();
}
return obsdebSamplingPlanModel;
}
Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/SampleRowModelFactory.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/SampleRowModelFactory.java (rev 0)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/SampleRowModelFactory.java 2011-03-08 16:18:29 UTC (rev 1055)
@@ -0,0 +1,105 @@
+package fr.ifremer.wao.ui.services;
+
+import fr.ifremer.wao.WaoUtils;
+import fr.ifremer.wao.bean.ConnectedUser;
+import fr.ifremer.wao.entity.Contact;
+import fr.ifremer.wao.entity.SampleRow;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.PropertyConduit;
+import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.services.BeanModelSource;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * Used to generate a bean model for the grid used in sampling plan showed
+ * on page {@link fr.ifremer.wao.ui.pages.ObsDebSamplingPlan}.
+ *
+ * This factory will generate a model showing the columns that the user
+ * has the right to see.
+ *
+ * @author bleny
+ */
+public class SampleRowModelFactory {
+
+ protected BeanModelSource beanModelSource;
+
+ protected ComponentResources resources;
+
+ protected ConnectedUser connectedUser;
+
+ protected BeanModel<SampleRow> model;
+
+ public SampleRowModelFactory(BeanModelSource beanModelSource, ComponentResources resources, ConnectedUser connectedUser) {
+ this.beanModelSource = beanModelSource;
+ this.resources = resources;
+ this.connectedUser = connectedUser;
+ }
+
+ /** add a property in the model and make it not sortable
+ * @param property the name of the property to add
+ * @param conduit a PropertyConduit to get the String representation of the
+ * value of the property, may be null if toString can be used */
+ protected void add(String property, PropertyConduit conduit) {
+ model.add(property, conduit);
+ model.get(property).sortable(false);
+ }
+
+ protected void add(String property) {
+ model.add(property);
+ model.get(property).sortable(false);
+ }
+
+ protected void initModel() {
+ add(SampleRow.PROPERTY_CODE);
+ add(SampleRow.PROPERTY_DAY, new SampleRowReaderPropertyConduit() {
+
+ @Override
+ public String getValue(SampleRow sampleRow) {
+ return WaoUtils.formatDate(sampleRow.getDay());
+ }
+ });
+ add(SampleRow.PROPERTY_OBSERVATION_UNIT);
+ add(SampleRow.PROPERTY_COMMENT);
+ add("actions", null);
+ }
+
+
+ /** put in common some implementation of PropertyConduit interface. */
+ protected static abstract class SampleRowReaderPropertyConduit implements PropertyConduit {
+
+ public abstract String getValue(SampleRow sampleRow);
+
+ @Override
+ public String get(Object instance) {
+ // cast and delegate
+ SampleRow sampleRow = (SampleRow) instance;
+ return getValue(sampleRow);
+ }
+
+ /** all value returned are string */
+ @Override
+ public Class getPropertyType() {
+ return String.class;
+ }
+
+ /** should never be called */
+ @Override
+ public void set(Object instance, Object value) {
+ throw new UnsupportedOperationException();
+ }
+
+ /** should never be called */
+ @Override
+ public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ public BeanModel<SampleRow> newModel() {
+ model = beanModelSource.createDisplayModel(SampleRow.class, resources.getMessages());
+ model.include(); // empty the model to include only what we want
+ initModel();
+ return model;
+ }
+}
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-07 17:15:10 UTC (rev 1054)
+++ trunk/wao-ui/src/main/resources/i18n/wao-ui_en_GB.properties 2011-03-08 16:18:29 UTC (rev 1055)
@@ -102,11 +102,14 @@
wao.ui.field.FishingZone.facadeName=Facade
wao.ui.field.FishingZone.sectorName=Sector
wao.ui.field.SampleRow.code=Line code
+wao.ui.field.SampleRow.comment=Comment
wao.ui.field.SampleRow.dCF5Code=
+wao.ui.field.SampleRow.day=Day
wao.ui.field.SampleRow.dcf5Code=DCF5 code
wao.ui.field.SampleRow.fishingZones=Fishing zone(s)
wao.ui.field.SampleRow.libelle=Labels
wao.ui.field.SampleRow.meshSize=Mesh size
+wao.ui.field.SampleRow.observationUnit=Observation unit
wao.ui.field.SampleRow.other=Other
wao.ui.field.SampleRow.periodBegin=Begin
wao.ui.field.SampleRow.periodEnd=End
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-07 17:15:10 UTC (rev 1054)
+++ trunk/wao-ui/src/main/resources/i18n/wao-ui_fr_FR.properties 2011-03-08 16:18:29 UTC (rev 1055)
@@ -102,11 +102,14 @@
wao.ui.field.FishingZone.facadeName=Fa\u00E7ade
wao.ui.field.FishingZone.sectorName=Zone
wao.ui.field.SampleRow.code=Code ligne
+wao.ui.field.SampleRow.comment=Commentaire
wao.ui.field.SampleRow.dCF5Code=Codes
+wao.ui.field.SampleRow.day=Jour
wao.ui.field.SampleRow.dcf5Code=Code DCF Niv. 5
wao.ui.field.SampleRow.fishingZones=Zone(s) de p\u00EAche
wao.ui.field.SampleRow.libelle=Libell\u00E9
wao.ui.field.SampleRow.meshSize=Maillage
+wao.ui.field.SampleRow.observationUnit=Unit\u00E9 d'observation
wao.ui.field.SampleRow.other=Autre
wao.ui.field.SampleRow.periodBegin=D\u00E9but
wao.ui.field.SampleRow.periodEnd=Fin
Modified: trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml
===================================================================
--- trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml 2011-03-07 17:15:10 UTC (rev 1054)
+++ trunk/wao-ui/src/main/webapp/ObsDebSamplingPlan.tml 2011-03-08 16:18:29 UTC (rev 1055)
@@ -1,8 +1,36 @@
<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">
+ <h1>${message:wao.ui.samplingPlan.title}</h1>
- </div>
+ <div t:type="grid" t:source="sampleRows" t:row="sampleRow" t:model="obsdebSamplingPlanModel" t:rowsPerPage="50">
+ <!-- code -->
+ <p:codeHeader>
+ ${message:wao.ui.field.SampleRow.code}
+ </p:codeHeader>
+ <!-- day -->
+ <p:dayHeader>
+ ${message:wao.ui.field.SampleRow.day}
+ </p:dayHeader>
+
+ <!-- observation unit -->
+ <p:observationUnitHeader>
+ ${message:wao.ui.field.SampleRow.observationUnit}
+ </p:observationUnitHeader>
+
+ <!-- comment -->
+ <p:commentHeader>
+ ${message:wao.ui.field.SampleRow.comment}
+ </p:commentHeader>
+
+ <!-- actions -->
+ <p:actionsHeader>
+ ${message:wao.ui.samplingPlan.actions}
+ </p:actionsHeader>
+ <p:actionsCell>
+ pas d'actions
+ </p:actionsCell>
+ </div>
+
</t:layout>
\ No newline at end of file
1
0
[Suiviobsmer-commits] r1054 - trunk/wao-business/src/test/resources/import
by bleny@users.labs.libre-entreprise.org 07 Mar '11
by bleny@users.labs.libre-entreprise.org 07 Mar '11
07 Mar '11
Author: bleny
Date: 2011-03-07 17:15:10 +0000 (Mon, 07 Mar 2011)
New Revision: 1054
Log:
add forgotten file
Added:
trunk/wao-business/src/test/resources/import/purifiedTerrestrialDivisions.csv
Added: trunk/wao-business/src/test/resources/import/purifiedTerrestrialDivisions.csv
===================================================================
--- trunk/wao-business/src/test/resources/import/purifiedTerrestrialDivisions.csv (rev 0)
+++ trunk/wao-business/src/test/resources/import/purifiedTerrestrialDivisions.csv 2011-03-07 17:15:10 UTC (rev 1054)
@@ -0,0 +1,414 @@
+"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;""
+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;""
+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
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