From scm@users.codelutin.com Wed Jun 29 15:37:16 2016
From: "codelutin.com scm" <scm@users.codelutin.com>
To: echobase-commits@list.forge.codelutin.com
Subject: [Echobase-commits] branch feature/8180 updated (33247f7 -> 4b96b1f)
Date: Wed, 29 Jun 2016 15:37:16 +0200
Message-ID: <20160629133716.18920.87149@bihar.codelutin.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="===============4955672685908404490=="

--===============4955672685908404490==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

This is an automated email from the git hooks/post-receive script.

New change to branch feature/8180 in repository echobase.

See https://gitlab.nuiton.org/codelutin/echobase.git

      from  33247f7   Add DataAcousticProvider in the model to avoid cast
       new  4b96b1f   Create basic import AncillaryInstrumentation for Mooring

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "adds" were already present in the repository and have only
been added to this reference.


Detailed log of new commits:

commit 4b96b1f11ca71f2727bde6e93619542fc85d2f62
Author: Julien Ruchaud <julien.ruchaud@debux.org>
Date:   Wed Jun 29 15:32:43 2016 +0200

    Create basic import AncillaryInstrumentation for Mooring

Summary of changes:
 .../echobase/entities/ImportFileIdTopiaDao.java    |   9 --
 .../fr/ifremer/echobase/entities/ImportType.java   |  14 +++
 .../entities/data/DataAcousticProvider.java        |  18 ++--
 .../{references/Ports.java =3D> data/Moorings.java}  |  12 +--
 .../ifremer/echobase/entities/data/VoyageImpl.java |  11 ++
 .../{Ports.java =3D> AncillaryInstrumentations.java} |  12 +--
 .../i18n/echobase-domain_en_GB.properties          |   4 +
 .../i18n/echobase-domain_fr_FR.properties          |   4 +
 .../echobase/services/csv/EchoBaseCsvUtil.java     |  22 ++++
 .../services/service/UserDbPersistenceService.java |   9 ++
 ...illaryInstrumentationAssociationException.java} |  10 +-
 .../service/importdata/ImportDataService.java      |  38 +++++--
 ...mportAncillaryInstrumentationActionSupport.java | 113 +++++++++++++++++++=
++
 .../actions/ImportDataActionSupport.java           |   6 --
 ...ommonsAncillaryInstrumentationImportAction.java |  66 ++++++++++++
 .../MooringCommonsImportDataActionSupport.java     |   8 +-
 .../actions/MooringCommonsMooringImportAction.java |  18 ++--
 ...VoyageResultsRegionAssociationImportAction.java |   4 -
 ...cillaryInstrumentationImportConfiguration.java} |  18 ++--
 ... MooringCommonsMooringImportConfiguration.java} |   6 +-
 .../MooringImportDataConfigurationSupport.java     |   2 +-
 .../VoyageCommonsImportConfiguration.java          |   9 +-
 .../contexts/ImportDataContextSupport.java         |  11 ++
 ...AncillaryInstrumentationImportDataContext.java} |  19 +++-
 ...=3D> MooringCommonsMooringImportDataContext.java} |   8 +-
 .../contexts/VoyageImportDataContextSupport.java   |   4 -
 .../importdata/csv/AcousticImportExportModel.java  |   2 +-
 .../csv/AncillaryInstrumentationImportRow.java     |  57 +++++++++++
 ...sAncillaryInstrumentationImportExportModel.java |  60 +++++++++++
 ...ngCommonsAncillaryInstrumentationImportRow.java |  69 +++++++++++++
 ...=3D> MooringCommonsMooringImportExportModel.java} |  14 +--
 ...sAncillaryInstrumentationImportExportModel.java |  60 +++++++++++
 ...eCommonsAncillaryInstrumentationImportRow.java} |  23 ++---
 .../service/removedata/RemoveDataService.java      |   8 +-
 ...aStrategy.java =3D> DummyRemoveDataStrategy.java} |   9 +-
 .../i18n/echobase-services_en_GB.properties        |   2 +
 .../i18n/echobase-services_fr_FR.properties        |   2 +
 .../echobase/services/EchoBaseServiceFixtures.java |   8 ++
 .../echobase/services/ImportDataFixtures.java      |   2 +
 ...nsAncillaryInstrumentationImportServiceIT.java} |  28 ++---
 ...a =3D> MooringCommonsMooringImportServiceIT.java} |  16 +--
 .../removedata/AbstractRemoveDataServiceTest.java  |   5 +-
 .../import-data/echobase-mooring.h2.db.gz          | Bin 936865 -> 938590 by=
tes
 .../mooring/ancillaryInstrumentation.csv.gz        | Bin 0 -> 96 bytes
 .../importData/ConfigureMooringCommonsImport.java  |  10 +-
 .../importData/LaunchMooringCommonsImport.java     |  10 +-
 46 files changed, 684 insertions(+), 156 deletions(-)
 copy echobase-domain/src/main/java/fr/ifremer/echobase/entities/{references/=
Ports.java =3D> data/Moorings.java} (79%)
 copy echobase-domain/src/main/java/fr/ifremer/echobase/entities/references/{=
Ports.java =3D> AncillaryInstrumentations.java} (75%)
 copy echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/{DuplicatedEchotypeAssociationException.java =3D> DuplicatedAncillar=
yInstrumentationAssociationException.java} (71%)
 create mode 100644 echobase-services/src/main/java/fr/ifremer/echobase/servi=
ces/service/importdata/actions/ImportAncillaryInstrumentationActionSupport.ja=
va
 create mode 100644 echobase-services/src/main/java/fr/ifremer/echobase/servi=
ces/service/importdata/actions/MooringCommonsAncillaryInstrumentationImportAc=
tion.java
 copy echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/{MooringCommonsImportConfiguration.java =3D> MooringC=
ommonsAncillaryInstrumentationImportConfiguration.java} (66%)
 rename echobase-services/src/main/java/fr/ifremer/echobase/services/service/=
importdata/configurations/{MooringCommonsImportConfiguration.java =3D> Moorin=
gCommonsMooringImportConfiguration.java} (89%)
 copy echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/contexts/{MooringAcousticsImportDataContext.java =3D> MooringCommons=
AncillaryInstrumentationImportDataContext.java} (63%)
 rename echobase-services/src/main/java/fr/ifremer/echobase/services/service/=
importdata/contexts/{MooringCommonsImportDataContext.java =3D> MooringCommons=
MooringImportDataContext.java} (75%)
 create mode 100644 echobase-services/src/main/java/fr/ifremer/echobase/servi=
ces/service/importdata/csv/AncillaryInstrumentationImportRow.java
 create mode 100644 echobase-services/src/main/java/fr/ifremer/echobase/servi=
ces/service/importdata/csv/MooringCommonsAncillaryInstrumentationImportExport=
Model.java
 create mode 100644 echobase-services/src/main/java/fr/ifremer/echobase/servi=
ces/service/importdata/csv/MooringCommonsAncillaryInstrumentationImportRow.ja=
va
 rename echobase-services/src/main/java/fr/ifremer/echobase/services/service/=
importdata/csv/{MooringCommonsImportExportModel.java =3D> MooringCommonsMoori=
ngImportExportModel.java} (85%)
 create mode 100644 echobase-services/src/main/java/fr/ifremer/echobase/servi=
ces/service/importdata/csv/VoyageCommonsAncillaryInstrumentationImportExportM=
odel.java
 copy echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/{VoyageResultsVoyageEchotypeImportRow.java =3D> VoyageCommonsAnc=
illaryInstrumentationImportRow.java} (67%)
 rename echobase-services/src/main/java/fr/ifremer/echobase/services/service/=
removedata/strategy/{DummyMooringRemoveDataStrategy.java =3D> DummyRemoveData=
Strategy.java} (77%)
 copy echobase-services/src/test/java/fr/ifremer/echobase/services/service/im=
portdata/{MooringCommonsImportServiceIT.java =3D> MooringCommonsAncillaryInst=
rumentationImportServiceIT.java} (53%)
 rename echobase-services/src/test/java/fr/ifremer/echobase/services/service/=
importdata/{MooringCommonsImportServiceIT.java =3D> MooringCommonsMooringImpo=
rtServiceIT.java} (74%)
 create mode 100644 echobase-services/src/test/resources/import-data/mooring/=
ancillaryInstrumentation.csv.gz

--=20
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm@codelutin.com>.

--===============4955672685908404490==--


From scm@users.codelutin.com Wed Jun 29 15:37:16 2016
From: "codelutin.com scm" <scm@users.codelutin.com>
To: echobase-commits@list.forge.codelutin.com
Subject: [Echobase-commits] 01/01: Create basic import
	AncillaryInstrumentation for Mooring
Date: Wed, 29 Jun 2016 15:37:17 +0200
Message-ID: <20160629133716.83ECF5C251C@goh.codelutin.com>
In-Reply-To: <20160629133716.18920.87149@bihar.codelutin.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="===============4400411965832893421=="

--===============4400411965832893421==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

This is an automated email from the git hooks/post-receive script.

New commit to branch feature/8180 in repository echobase.

See https://gitlab.nuiton.org/codelutin/echobase.git

commit 4b96b1f11ca71f2727bde6e93619542fc85d2f62
Author: Julien Ruchaud <julien.ruchaud@debux.org>
Date:   Wed Jun 29 15:32:43 2016 +0200

    Create basic import AncillaryInstrumentation for Mooring
---
 .../echobase/entities/ImportFileIdTopiaDao.java    |   9 --
 .../fr/ifremer/echobase/entities/ImportType.java   |  14 +++
 .../entities/data/DataAcousticProvider.java        |  18 ++--
 .../ifremer/echobase/entities/data/Moorings.java   |  35 +++----
 .../ifremer/echobase/entities/data/VoyageImpl.java |  11 ++
 .../references/AncillaryInstrumentations.java      |  35 +++----
 .../i18n/echobase-domain_en_GB.properties          |   4 +
 .../i18n/echobase-domain_fr_FR.properties          |   4 +
 .../echobase/services/csv/EchoBaseCsvUtil.java     |  22 ++++
 .../services/service/UserDbPersistenceService.java |   9 ++
 ...illaryInstrumentationAssociationException.java} |  20 ++--
 .../service/importdata/ImportDataService.java      |  38 +++++--
 ...mportAncillaryInstrumentationActionSupport.java | 113 +++++++++++++++++++=
++
 .../actions/ImportDataActionSupport.java           |   6 --
 ...ommonsAncillaryInstrumentationImportAction.java |  66 ++++++++++++
 .../MooringCommonsImportDataActionSupport.java     |   8 +-
 .../actions/MooringCommonsMooringImportAction.java |  18 ++--
 ...VoyageResultsRegionAssociationImportAction.java |   4 -
 ...cillaryInstrumentationImportConfiguration.java} |  18 ++--
 ... MooringCommonsMooringImportConfiguration.java} |   6 +-
 .../MooringImportDataConfigurationSupport.java     |   2 +-
 .../VoyageCommonsImportConfiguration.java          |   9 +-
 .../contexts/ImportDataContextSupport.java         |  11 ++
 ...AncillaryInstrumentationImportDataContext.java} |  33 +++++-
 ...=3D> MooringCommonsMooringImportDataContext.java} |   8 +-
 .../contexts/VoyageImportDataContextSupport.java   |   4 -
 .../importdata/csv/AcousticImportExportModel.java  |   2 +-
 .../csv/AncillaryInstrumentationImportRow.java     |  57 +++++++++++
 ...sAncillaryInstrumentationImportExportModel.java |  60 +++++++++++
 ...ngCommonsAncillaryInstrumentationImportRow.java |  69 +++++++++++++
 ...=3D> MooringCommonsMooringImportExportModel.java} |  14 +--
 ...sAncillaryInstrumentationImportExportModel.java |  60 +++++++++++
 ...geCommonsAncillaryInstrumentationImportRow.java |  70 +++++++++++++
 .../service/removedata/RemoveDataService.java      |   8 +-
 ...aStrategy.java =3D> DummyRemoveDataStrategy.java} |   9 +-
 .../i18n/echobase-services_en_GB.properties        |   2 +
 .../i18n/echobase-services_fr_FR.properties        |   2 +
 .../echobase/services/EchoBaseServiceFixtures.java |   8 ++
 .../echobase/services/ImportDataFixtures.java      |   2 +
 ...nsAncillaryInstrumentationImportServiceIT.java} |  28 ++---
 ...a =3D> MooringCommonsMooringImportServiceIT.java} |  16 +--
 .../removedata/AbstractRemoveDataServiceTest.java  |   5 +-
 .../import-data/echobase-mooring.h2.db.gz          | Bin 936865 -> 938590 by=
tes
 .../mooring/ancillaryInstrumentation.csv.gz        | Bin 0 -> 96 bytes
 .../importData/ConfigureMooringCommonsImport.java  |  10 +-
 .../importData/LaunchMooringCommonsImport.java     |  10 +-
 46 files changed, 780 insertions(+), 177 deletions(-)

diff --git a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/Impor=
tFileIdTopiaDao.java b/echobase-domain/src/main/java/fr/ifremer/echobase/enti=
ties/ImportFileIdTopiaDao.java
index 6247693..72a136b 100644
--- a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ImportFileId=
TopiaDao.java
+++ b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ImportFileId=
TopiaDao.java
@@ -53,28 +53,19 @@ public class ImportFileIdTopiaDao extends AbstractImportF=
ileIdTopiaDao<ImportFil
     }
=20
     public <E extends TopiaEntity> Iterable<E> getImportedEntities(ImportFil=
e importFile, Class<E> entityType) {
-
         return findAllLazy(importFile, entityType, "e");
-
     }
=20
     public Iterable<ImportedCellResult> getImportedCellResults(ImportFile im=
portFile) {
-
         return findAllLazy(importFile, Result.class, "new fr.ifremer.echobas=
e.entities.ImportedCellResult(i.lineNumber, e.cell, e.category, e)");
-
     }
=20
-
     public Iterable<ImportedSampleDataResult> getImportedSampleDataResults(I=
mportFile importFile) {
-
         return findAllLazy(importFile, SampleData.class, "new fr.ifremer.ech=
obase.entities.ImportedSampleDataResult(i.lineNumber, e.sample.operation, e.s=
ample, e.sample.speciesCategory, e)");
-
     }
=20
     public Iterable<ImportedCell> getImportedAcousticCells(ImportFile import=
File) {
-
         return findAllLazy(importFile, Cell.class, "new fr.ifremer.echobase.=
entities.ImportedCell(i.lineNumber, e)");
-
     }
=20
     protected <T, E extends TopiaEntity> Iterable<T> findAllLazy(ImportFile =
importFile, Class<E> entityType, String constructor) {
diff --git a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/Impor=
tType.java b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/Impor=
tType.java
index 90e192c..c3e472d 100644
--- a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ImportType.j=
ava
+++ b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ImportType.j=
ava
@@ -68,6 +68,13 @@ public enum ImportType implements I18nAble {
             n("echobase.common.importType.commonDataTransect.short")
     ),
=20
+    /** Import ancillary instrumentation data. */
+    COMMON_ANCILLARY_INSTRUMENTATION(
+            EchoBaseUserEntityEnum.Mooring,
+            n("echobase.common.importType.ancillaryInstrumentationVoyage"),
+            n("echobase.common.importType.ancillaryInstrumentationVoyage.sho=
rt")
+    ),
+
     /** Import Operations. */
     OPERATION(
             EchoBaseUserEntityEnum.Voyage,
@@ -131,6 +138,13 @@ public enum ImportType implements I18nAble {
             n("echobase.common.importType.mooring.short")
     ),
=20
+    /** Import ancillary instrumentation data. */
+    MOORING_ANCILLARY_INSTRUMENTATION(
+            EchoBaseUserEntityEnum.Mooring,
+            n("echobase.common.importType.ancillaryInstrumentationMooring"),
+            n("echobase.common.importType.ancillaryInstrumentationMooring.sh=
ort")
+    ),
+   =20
     /** Import accoustic data (Cells ESDU and Elementary). */
     MOORING_ACOUSTIC(
             EchoBaseUserEntityEnum.Mooring,
diff --git a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/=
DataAcousticProvider.java b/echobase-domain/src/main/java/fr/ifremer/echobase=
/entities/data/DataAcousticProvider.java
index bb35e6a..9347d0a 100644
--- a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/DataAco=
usticProvider.java
+++ b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/DataAco=
usticProvider.java
@@ -1,7 +1,6 @@
 package fr.ifremer.echobase.entities.data;
=20
-import fr.ifremer.echobase.entities.data.DataAcquisition;
-import fr.ifremer.echobase.entities.data.Echotype;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
 import java.util.Collection;
 import org.nuiton.topia.persistence.TopiaEntity;
=20
@@ -27,7 +26,7 @@ import org.nuiton.topia.persistence.TopiaEntity;
  */
=20
 /**
- * Common part on Voyage or Mooring.
+ * Common part on Voyage or Mooring or Transect.
  *=20
  * @author Julien Ruchaud - ruchaud@codelutin.com
  * @since 4.0
@@ -42,13 +41,18 @@ public interface DataAcousticProvider<E extends TopiaEnti=
ty> {
            =20
     Collection<DataAcquisition> getDataAcquisition();
    =20
-    public void addDataAcquisition(DataAcquisition dataAcquisition);
+    void addDataAcquisition(DataAcquisition dataAcquisition);
    =20
=20
     // For Echotype import
-    public boolean isEchotypeEmpty();
+    boolean isEchotypeEmpty();
=20
-    public Collection<Echotype> getEchotype();
+    Collection<Echotype> getEchotype();
=20
-    public void addEchotype(Echotype echotype);
+    void addEchotype(Echotype echotype);
+   =20
+    // For AncillaryInstrumentation import
+    AncillaryInstrumentation getAncillaryInstrumentationByTopiaId(String top=
iaId);
+   =20
+    void addAncillaryInstrumentation(AncillaryInstrumentation ancillaryInstr=
umentation);
 }
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/configurations/MooringImportDataConfigurationSupport.java b/e=
chobase-domain/src/main/java/fr/ifremer/echobase/entities/data/Moorings.java
similarity index 55%
copy from echobase-services/src/main/java/fr/ifremer/echobase/services/servic=
e/importdata/configurations/MooringImportDataConfigurationSupport.java
copy to echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/Moori=
ngs.java
index 75f0fa4..b6cd4c0 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/MooringImportDataConfigurationSupport.java
+++ b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/Mooring=
s.java
@@ -1,8 +1,10 @@
+package fr.ifremer.echobase.entities.data;
+
 /*
  * #%L
- * EchoBase :: Services
+ * EchoBase :: Domain
  * %%
- * Copyright (C) 2011 - 2012 Ifremer, Codelutin
+ * Copyright (C) 2011 - 2015 Ifremer, Codelutin
  * %%
  * 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
@@ -18,27 +20,18 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * #L%
  */
-package fr.ifremer.echobase.services.service.importdata.configurations;
+
+import com.google.common.base.Function;
=20
 /**
- * Common import data configuration for mooring.
- *
  * @author Julien Ruchaud - ruchaud@codelutin.com
- * @since 0.4
+ * @since 4.0
  */
-public abstract class MooringImportDataConfigurationSupport extends ImportDa=
taConfigurationSupport {
-
-    private static final long serialVersionUID =3D 1L;
-
-    /** Selected mooring id where to import datas. */
-    protected String mooringId;
-
-    public String getMooringId() {
-        return mooringId;
-    }
-
-    public void setMooringId(String mooringId) {
-        this.mooringId =3D mooringId;
-    }
-
+public class Moorings {
+    public static final Function<Mooring, String> MOORING_CODE =3D new Funct=
ion<Mooring, String>() {
+        @Override
+        public String apply(Mooring input) {
+            return input.getCode();
+        }
+    };
 }
diff --git a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/=
VoyageImpl.java b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/=
data/VoyageImpl.java
index 3488b9a..4174a49 100644
--- a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/VoyageI=
mpl.java
+++ b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/VoyageI=
mpl.java
@@ -25,6 +25,7 @@ import com.google.common.collect.Collections2;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
 import fr.ifremer.echobase.entities.references.Vessel;
=20
 import java.util.Collection;
@@ -186,4 +187,14 @@ public class VoyageImpl extends VoyageAbstract {
     public Voyage getEntity() {
         return this;
     }
+
+    @Override
+    public AncillaryInstrumentation getAncillaryInstrumentationByTopiaId(Str=
ing topiaId) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void addAncillaryInstrumentation(AncillaryInstrumentation ancilla=
ryInstrumentation) {
+        throw new UnsupportedOperationException();
+    }
 }
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/configurations/MooringImportDataConfigurationSupport.java b/e=
chobase-domain/src/main/java/fr/ifremer/echobase/entities/references/Ancillar=
yInstrumentations.java
similarity index 55%
copy from echobase-services/src/main/java/fr/ifremer/echobase/services/servic=
e/importdata/configurations/MooringImportDataConfigurationSupport.java
copy to echobase-domain/src/main/java/fr/ifremer/echobase/entities/references=
/AncillaryInstrumentations.java
index 75f0fa4..45cb4b1 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/MooringImportDataConfigurationSupport.java
+++ b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/references/A=
ncillaryInstrumentations.java
@@ -1,8 +1,10 @@
+package fr.ifremer.echobase.entities.references;
+
 /*
  * #%L
- * EchoBase :: Services
+ * EchoBase :: Domain
  * %%
- * Copyright (C) 2011 - 2012 Ifremer, Codelutin
+ * Copyright (C) 2011 - 2015 Ifremer, Codelutin
  * %%
  * 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
@@ -18,27 +20,18 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * #L%
  */
-package fr.ifremer.echobase.services.service.importdata.configurations;
+
+import com.google.common.base.Function;
=20
 /**
- * Common import data configuration for mooring.
- *
  * @author Julien Ruchaud - ruchaud@codelutin.com
- * @since 0.4
+ * @since 4.0
  */
-public abstract class MooringImportDataConfigurationSupport extends ImportDa=
taConfigurationSupport {
-
-    private static final long serialVersionUID =3D 1L;
-
-    /** Selected mooring id where to import datas. */
-    protected String mooringId;
-
-    public String getMooringId() {
-        return mooringId;
-    }
-
-    public void setMooringId(String mooringId) {
-        this.mooringId =3D mooringId;
-    }
-
+public class AncillaryInstrumentations {
+    public static final Function<AncillaryInstrumentation, String> ANCILLARY=
_INSTRUMENTATION_NAME =3D new Function<AncillaryInstrumentation, String>() {
+        @Override
+        public String apply(AncillaryInstrumentation input) {
+            return input.getName();
+        }
+    };
 }
diff --git a/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.pr=
operties b/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.prop=
erties
index 2c35a90..59915f1 100644
--- a/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties
+++ b/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties
@@ -2,6 +2,10 @@ echobase.common.driverType.h2=3DH2 Database
 echobase.common.driverType.postgres=3DPostgresql Database
 echobase.common.importType.acoustic=3DAcoustic data import
 echobase.common.importType.acoustic.short=3DAcoustic
+echobase.common.importType.ancillaryInstrumentationMooring=3D
+echobase.common.importType.ancillaryInstrumentationMooring.short=3D
+echobase.common.importType.ancillaryInstrumentationVoyage=3D
+echobase.common.importType.ancillaryInstrumentationVoyage.short=3D
 echobase.common.importType.catches=3DFishing data import
 echobase.common.importType.catches.short=3DFishing
 echobase.common.importType.commonDataAll=3DVoyage / Transit / Transects impo=
rt
diff --git a/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.pr=
operties b/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.prop=
erties
index fbc89ba..501c657 100644
--- a/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties
+++ b/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties
@@ -2,6 +2,10 @@ echobase.common.driverType.h2=3DBase H2
 echobase.common.driverType.postgres=3DBase Postgresql
 echobase.common.importType.acoustic=3DImport des donn=C3=A9es acoustiques
 echobase.common.importType.acoustic.short=3DAcoustique
+echobase.common.importType.ancillaryInstrumentationMooring=3D
+echobase.common.importType.ancillaryInstrumentationMooring.short=3D
+echobase.common.importType.ancillaryInstrumentationVoyage=3D
+echobase.common.importType.ancillaryInstrumentationVoyage.short=3D
 echobase.common.importType.catches=3DImport des donn=C3=A9es de p=C3=AAche
 echobase.common.importType.catches.short=3DP=C3=AAche
 echobase.common.importType.commonDataAll=3DImport Voyage / Transit / Transec=
ts
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/csv=
/EchoBaseCsvUtil.java b/echobase-services/src/main/java/fr/ifremer/echobase/s=
ervices/csv/EchoBaseCsvUtil.java
index c6fdb54..96b7d4d 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBa=
seCsvUtil.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBa=
seCsvUtil.java
@@ -23,11 +23,13 @@ package fr.ifremer.echobase.services.csv;
 import com.google.common.base.Function;
 import fr.ifremer.echobase.entities.data.Cell;
 import fr.ifremer.echobase.entities.data.Echotype;
+import fr.ifremer.echobase.entities.data.Mooring;
 import fr.ifremer.echobase.entities.data.Operation;
 import fr.ifremer.echobase.entities.data.Result;
 import fr.ifremer.echobase.entities.data.Voyage;
 import fr.ifremer.echobase.entities.references.AcousticInstrument;
 import fr.ifremer.echobase.entities.references.AgeCategory;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
 import fr.ifremer.echobase.entities.references.CellType;
 import fr.ifremer.echobase.entities.references.DataMetadata;
 import fr.ifremer.echobase.entities.references.DataQuality;
@@ -254,6 +256,26 @@ public class EchoBaseCsvUtil extends TopiaCsvCommons {
                 }
             }
     );
+   =20
+    public static final ValueFormatter<Mooring> MOORING_FORMATTER =3D newVal=
ueFormatterByFunction(
+            new Function<Mooring, String>() {
+
+                @Override
+                public String apply(Mooring input) {
+                    return input.getCode();
+                }
+            }
+    );
+   =20
+    public static final ValueFormatter<AncillaryInstrumentation> ANCILLARY_I=
NSTRUMENTATION_FORMATTER =3D newValueFormatterByFunction(
+            new Function<AncillaryInstrumentation, String>() {
+
+                @Override
+                public String apply(AncillaryInstrumentation input) {
+                    return input.getName();
+                }
+            }
+    );
=20
     public static <E> ValueFormatter<E> newValueFormatterByFunction(Function=
<E, String> function) {
         return new ValueFormatterByFunction<>(function);
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/UserDbPersistenceService.java b/echobase-services/src/main/java/fr/ifrem=
er/echobase/services/service/UserDbPersistenceService.java
index a80067b..ec7c0ce 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/Us=
erDbPersistenceService.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/Us=
erDbPersistenceService.java
@@ -63,6 +63,7 @@ import fr.ifremer.echobase.entities.data.Transit;
 import fr.ifremer.echobase.entities.data.Voyage;
 import fr.ifremer.echobase.entities.references.AcousticInstrument;
 import fr.ifremer.echobase.entities.references.AgeCategory;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
 import fr.ifremer.echobase.entities.references.AreaOfOperation;
 import fr.ifremer.echobase.entities.references.CellType;
 import fr.ifremer.echobase.entities.references.CellTypeImpl;
@@ -166,6 +167,14 @@ public class UserDbPersistenceService extends EchoBaseSe=
rviceSupport {
     }
=20
     //----------------------------------------------------------------------=
--//
+    //--- AncillaryInstrumentation -----------------------------------------=
-----------//
+    //----------------------------------------------------------------------=
--//
+
+    public AncillaryInstrumentation getAncillaryInstrumentation(String id) {
+        return persistenceContext.getAncillaryInstrumentationDao().forTopiaI=
dEquals(id).findUnique();
+    }
+
+    //----------------------------------------------------------------------=
--//
     //--- Category ---------------------------------------------------------=
--//
     //----------------------------------------------------------------------=
--//
=20
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/actions/MooringCommonsImportDataActionSupport.java b/echobase=
-services/src/main/java/fr/ifremer/echobase/services/service/importdata/Dupli=
catedAncillaryInstrumentationAssociationException.java
similarity index 55%
copy from echobase-services/src/main/java/fr/ifremer/echobase/services/servic=
e/importdata/actions/MooringCommonsImportDataActionSupport.java
copy to echobase-services/src/main/java/fr/ifremer/echobase/services/service/=
importdata/DuplicatedAncillaryInstrumentationAssociationException.java
index 65ef1ac..20f7b2d 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/MooringCommonsImportDataActionSupport.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/DuplicatedAncillaryInstrumentationAssociationException.java
@@ -1,4 +1,4 @@
-package fr.ifremer.echobase.services.service.importdata.actions;
+package fr.ifremer.echobase.services.service.importdata;
=20
 /*
  * #%L
@@ -21,19 +21,19 @@ package fr.ifremer.echobase.services.service.importdata.a=
ctions;
  * #L%
  */
=20
-import fr.ifremer.echobase.io.InputFile;
-import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsImportConfiguration;
-import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsImportDataContext;
+import org.nuiton.csv.ImportRuntimeException;
+
+import java.util.Locale;
+
+import static org.nuiton.i18n.I18n.l;
=20
 /**
- * Created on 30/03/16.
- *
  * @author Julien Ruchaud - ruchaud@codelutin.com
+ * @since 4.0
  */
-public abstract class MooringCommonsImportDataActionSupport<E> extends Impor=
tDataActionSupport<MooringCommonsImportConfiguration, MooringCommonsImportDat=
aContext, E> {
+public class DuplicatedAncillaryInstrumentationAssociationException extends =
ImportRuntimeException {
=20
-    protected MooringCommonsImportDataActionSupport(MooringCommonsImportData=
Context importDataContext, InputFile inputFile) {
-        super(importDataContext, inputFile);
+    public DuplicatedAncillaryInstrumentationAssociationException(Locale loc=
ale, int rowNumber, String providerName, String ancillaryInstrumentationName)=
 {
+        super(l(locale, "echobase.importError.duplicate.echotypeAncillaryIns=
trumentationAssociation", rowNumber, providerName, ancillaryInstrumentationNa=
me));
     }
-
 }
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/ImportDataService.java b/echobase-services/src/main/java/fr/i=
fremer/echobase/services/service/importdata/ImportDataService.java
index 154fd2d..240e418 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/ImportDataService.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/ImportDataService.java
@@ -31,6 +31,7 @@ import fr.ifremer.echobase.services.EchoBaseServiceSupport;
 import fr.ifremer.echobase.services.service.UserDbPersistenceService;
 import fr.ifremer.echobase.services.service.importdata.actions.ImportDataAct=
ionSupport;
 import fr.ifremer.echobase.services.service.importdata.actions.MooringAcoust=
icsImportAction;
+import fr.ifremer.echobase.services.service.importdata.actions.MooringCommon=
sAncillaryInstrumentationImportAction;
 import fr.ifremer.echobase.services.service.importdata.actions.MooringCommon=
sMooringImportAction;
 import fr.ifremer.echobase.services.service.importdata.actions.VoyageAcousti=
csImportAction;
 import fr.ifremer.echobase.services.service.importdata.actions.VoyageCatches=
BiometrySampleImportAction;
@@ -56,7 +57,8 @@ import fr.ifremer.echobase.services.service.importdata.acti=
ons.VoyageResultsVoya
 import fr.ifremer.echobase.services.service.importdata.actions.VoyageResults=
VoyageLengthWeightKeyImportAction;
 import fr.ifremer.echobase.services.service.importdata.configurations.Import=
DataConfigurationSupport;
 import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gAcousticsImportConfiguration;
-import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsAncillaryInstrumentationImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsMooringImportConfiguration;
 import fr.ifremer.echobase.services.service.importdata.configurations.Voyage=
AcousticsImportConfiguration;
 import fr.ifremer.echobase.services.service.importdata.configurations.Voyage=
CatchesImportConfiguration;
 import fr.ifremer.echobase.services.service.importdata.configurations.Voyage=
CommonsImportConfiguration;
@@ -64,7 +66,8 @@ import fr.ifremer.echobase.services.service.importdata.conf=
igurations.VoyageOper
 import fr.ifremer.echobase.services.service.importdata.configurations.Voyage=
ResultsImportConfiguration;
 import fr.ifremer.echobase.services.service.importdata.contexts.ImportDataCo=
ntextSupport;
 import fr.ifremer.echobase.services.service.importdata.contexts.MooringAcous=
ticsImportDataContext;
-import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsImportDataContext;
+import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsAncillaryInstrumentationImportDataContext;
+import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsMooringImportDataContext;
 import fr.ifremer.echobase.services.service.importdata.contexts.VoyageAcoust=
icsImportDataContext;
 import fr.ifremer.echobase.services.service.importdata.contexts.VoyageCatche=
sImportDataContext;
 import fr.ifremer.echobase.services.service.importdata.contexts.VoyageCommon=
sImportDataContext;
@@ -185,11 +188,17 @@ public class ImportDataService extends EchoBaseServiceS=
upport {
=20
     }
    =20
-    public ImportDataResult<MooringCommonsImportConfiguration> doImportMoori=
ngCommons(MooringCommonsImportConfiguration configuration, EchoBaseUser user)=
 throws ImportException {
-        MooringCommonsImportDataContext importDataContext =3D newMooringComm=
onsImportContext(configuration, user);
+    public ImportDataResult<MooringCommonsMooringImportConfiguration> doImpo=
rtMooringCommonsMooring(MooringCommonsMooringImportConfiguration configuratio=
n, EchoBaseUser user) throws ImportException {
+        MooringCommonsMooringImportDataContext importDataContext =3D newMoor=
ingCommonsMooringImportContext(configuration, user);
         Set<MooringCommonsMooringImportAction> importActions =3D Collections=
.singleton(new MooringCommonsMooringImportAction(importDataContext));
         return doImport(importDataContext, importActions);
     }
+   =20
+    public ImportDataResult<MooringCommonsAncillaryInstrumentationImportConf=
iguration> doImportMooringCommonsAncillaryInstrumentation(MooringCommonsAncil=
laryInstrumentationImportConfiguration configuration, EchoBaseUser user) thro=
ws ImportException {
+        MooringCommonsAncillaryInstrumentationImportDataContext importDataCo=
ntext =3D newMooringCommonsAncillaryInstrumentationImportContext(configuratio=
n, user);
+        Set<MooringCommonsAncillaryInstrumentationImportAction> importAction=
s =3D Collections.singleton(new MooringCommonsAncillaryInstrumentationImportA=
ction(importDataContext));
+        return doImport(importDataContext, importActions);
+    }
=20
     public ImportDataResult<MooringAcousticsImportConfiguration> doImportMoo=
ringAcoustics(MooringAcousticsImportConfiguration configuration, EchoBaseUser=
 user) throws ImportException {
=20
@@ -312,8 +321,12 @@ public class ImportDataService extends EchoBaseServiceSu=
pport {
         return new VoyageAcousticsImportDataContext(persistenceService, getL=
ocale(), getCsvSeparator(), configuration, user, newDate());
     }
=20
-    private MooringCommonsImportDataContext newMooringCommonsImportContext(M=
ooringCommonsImportConfiguration configuration, EchoBaseUser user) {
-        return new MooringCommonsImportDataContext(persistenceService, getLo=
cale(), getCsvSeparator(), configuration, user, newDate());
+    private MooringCommonsMooringImportDataContext newMooringCommonsMooringI=
mportContext(MooringCommonsMooringImportConfiguration configuration, EchoBase=
User user) {
+        return new MooringCommonsMooringImportDataContext(persistenceService=
, getLocale(), getCsvSeparator(), configuration, user, newDate());
+    }
+
+    private MooringCommonsAncillaryInstrumentationImportDataContext newMoori=
ngCommonsAncillaryInstrumentationImportContext(MooringCommonsAncillaryInstrum=
entationImportConfiguration configuration, EchoBaseUser user) {
+        return new MooringCommonsAncillaryInstrumentationImportDataContext(p=
ersistenceService, getLocale(), getCsvSeparator(), configuration, user, newDa=
te());
     }
=20
     private MooringAcousticsImportDataContext newMooringAcousticsImportConte=
xt(MooringAcousticsImportConfiguration configuration, EchoBaseUser user) {
@@ -436,10 +449,17 @@ public class ImportDataService extends EchoBaseServiceS=
upport {
         }
     }
=20
-    public static class MooringCommonsImportDataAction implements ImportData=
Action<MooringCommonsImportConfiguration> {
+    public static class MooringCommonsMooringImportDataAction implements Imp=
ortDataAction<MooringCommonsMooringImportConfiguration> {
+        @Override
+        public ImportDataResult<MooringCommonsMooringImportConfiguration> do=
Import(ImportDataService service, MooringCommonsMooringImportConfiguration co=
nfiguration, EchoBaseUser user) throws ImportException {
+            return service.doImportMooringCommonsMooring(configuration, user=
);
+        }
+    }
+
+    public static class MooringCommonsAncillaryInstrumentationImportDataActi=
on implements ImportDataAction<MooringCommonsAncillaryInstrumentationImportCo=
nfiguration> {
         @Override
-        public ImportDataResult<MooringCommonsImportConfiguration> doImport(=
ImportDataService service, MooringCommonsImportConfiguration configuration, E=
choBaseUser user) throws ImportException {
-            return service.doImportMooringCommons(configuration, user);
+        public ImportDataResult<MooringCommonsAncillaryInstrumentationImport=
Configuration> doImport(ImportDataService service, MooringCommonsAncillaryIns=
trumentationImportConfiguration configuration, EchoBaseUser user) throws Impo=
rtException {
+            return service.doImportMooringCommonsAncillaryInstrumentation(co=
nfiguration, user);
         }
     }
=20
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/actions/ImportAncillaryInstrumentationActionSupport.java b/ec=
hobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata=
/actions/ImportAncillaryInstrumentationActionSupport.java
new file mode 100644
index 0000000..5a41ebf
--- /dev/null
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/ImportAncillaryInstrumentationActionSupport.java
@@ -0,0 +1,113 @@
+package fr.ifremer.echobase.services.service.importdata.actions;
+
+/*
+ * #%L
+ * EchoBase :: Services
+ * %%
+ * Copyright (C) 2011 - 2016 Ifremer, Codelutin
+ * %%
+ * 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.
+ *=20
+ * 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.
+ *=20
+ * 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%
+ */
+
+import com.google.common.base.Preconditions;
+import fr.ifremer.echobase.entities.EchoBaseUserEntityEnum;
+import fr.ifremer.echobase.entities.data.DataAcousticProvider;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
+import fr.ifremer.echobase.io.InputFile;
+import fr.ifremer.echobase.services.service.importdata.DuplicatedAncillaryIn=
strumentationAssociationException;
+import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult;
+import fr.ifremer.echobase.services.service.importdata.MismatchProviderExcep=
tion;
+import fr.ifremer.echobase.services.service.importdata.configurations.Import=
DataConfigurationSupport;
+import fr.ifremer.echobase.services.service.importdata.contexts.ImportDataCo=
ntextSupport;
+import fr.ifremer.echobase.services.service.importdata.csv.AncillaryInstrume=
ntationImportRow;
+import java.util.LinkedList;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.csv.Import;
+
+/**
+ * @author Julien Ruchaud - ruchaud@codelutin.com
+ * @since 4.0
+ */
+public abstract class ImportAncillaryInstrumentationActionSupport<M extends =
ImportDataConfigurationSupport, C extends ImportDataContextSupport<M>, E exte=
nds AncillaryInstrumentationImportRow> extends ImportDataActionSupport<M, C, =
E> {
+
+    /** Logger. */
+    private static final Log log =3D LogFactory.getLog(ImportAncillaryInstru=
mentationActionSupport.class);
+   =20
+    private final LinkedList<String> ancillaryInstrumentations =3D new Linke=
dList<>();
+   =20
+    public ImportAncillaryInstrumentationActionSupport(C importDataContext, =
InputFile inputFile) {
+        super(importDataContext, inputFile);
+    }
+   =20
+    protected abstract E newImportedRow(DataAcousticProvider provider, Ancil=
laryInstrumentation ancillaryInstrumentation);
+
+    protected abstract DataAcousticProvider getDataProvider(C importDataCont=
ext);
+
+    @Override
+    protected void performImport(C importDataContext, InputFile inputFile, I=
mportDataFileResult result) {
+        if (log.isInfoEnabled()) {
+            log.info("Starts import of ancillary instrumentation from file "=
 + inputFile.getFileName());
+        }
+
+        DataAcousticProvider expectedProvider =3D getDataProvider(importData=
Context);
+
+        try (Import<E> importer =3D open()) {
+
+            incrementsProgress();
+
+            int rowNumber =3D 0;
+            for (E row : importer) {
+
+                doFlushTransaction(++rowNumber);
+
+                DataAcousticProvider provider =3D row.getProvider();
+
+                if (!expectedProvider.equals(provider)) {
+                    throw new MismatchProviderException(getLocale(), rowNumb=
er, provider.getName());
+                }
+
+                AncillaryInstrumentation ancillaryInstrumentation =3D row.ge=
tAncillaryInstrumentation();
+
+                AncillaryInstrumentation existingAncillaryInstrumentation =
=3D provider.getAncillaryInstrumentationByTopiaId(ancillaryInstrumentation.ge=
tTopiaId());
+                if (existingAncillaryInstrumentation !=3D null) {
+                    throw new DuplicatedAncillaryInstrumentationAssociationE=
xception(getLocale(), rowNumber, provider.getName(), ancillaryInstrumentation=
.getName());
+                }
+
+                // add it
+                provider.addAncillaryInstrumentation(ancillaryInstrumentatio=
n);
+                ancillaryInstrumentations.add(ancillaryInstrumentation.getTo=
piaId());
+               =20
+               =20
+                result.incrementsNumberUpdated(EchoBaseUserEntityEnum.Ancill=
aryInstrumentation);
+                addProcessedRow(result, row);
+            }
+        }
+    }
+
+    @Override
+    protected void computeImportedExport(C importDataContext, ImportDataFile=
Result result) {
+        DataAcousticProvider provider =3D getDataProvider(importDataContext);
+       =20
+        for (String ancillaryInstrumentationId : ancillaryInstrumentations) {
+            AncillaryInstrumentation ancillaryInstrumentation =3D persistenc=
eService.getAncillaryInstrumentation(ancillaryInstrumentationId);
+            Preconditions.checkNotNull(ancillaryInstrumentation);
+
+            E row =3D newImportedRow(provider, ancillaryInstrumentation);
+            addImportedRow(result, row);
+        }
+    }
+
+}
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/actions/ImportDataActionSupport.java b/echobase-services/src/=
main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportDataA=
ctionSupport.java
index 0039f23..3031c0a 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/ImportDataActionSupport.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/ImportDataActionSupport.java
@@ -431,7 +431,6 @@ public abstract class ImportDataActionSupport<M extends I=
mportDataConfigurationS
     }
=20
     public <EE extends TopiaEntity> void addId(ImportDataFileResult importRe=
sult, EchoBaseUserEntityEnum entityEnum, EE entity, int lineNumber) {
-
         int entityCount =3D importResult.addId(entityEnum);
=20
         ImportFileId importFileId =3D persistenceService.newImportFileId(imp=
ortResult.getImportFile(), entity, lineNumber, entityCount);
@@ -440,13 +439,10 @@ public abstract class ImportDataActionSupport<M extends=
 ImportDataConfigurationS
         if (importedFileIdsToPersist.size() % EXPORT_FLUSH_MAX =3D=3D 0) {
             flushImportFileIds(importResult);
         }
-
     }
=20
     protected <EE extends TopiaEntity> Iterable<EE> getImportedEntities(Clas=
s<EE> type, ImportDataFileResult result) {
-
         return persistenceService.getImportedEntities(result.getImportFile()=
, type);
-
     }
=20
     protected Iterable<ImportFileId> getImportFileIds(ImportDataFileResult r=
esult) {
@@ -454,7 +450,6 @@ public abstract class ImportDataActionSupport<M extends I=
mportDataConfigurationS
     }
=20
     private void flushProcessedExport(ImportDataFileResult result) {
-
         try {
             csvProcessedExport.export(processedRowsToExport);
         } catch (Exception e) {
@@ -462,7 +457,6 @@ public abstract class ImportDataActionSupport<M extends I=
mportDataConfigurationS
         } finally {
             processedRowsToExport.clear();
         }
-
     }
=20
     private void flushImportedExport(ImportDataFileResult result) {
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/actions/MooringCommonsAncillaryInstrumentationImportAction.ja=
va b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/imp=
ortdata/actions/MooringCommonsAncillaryInstrumentationImportAction.java
new file mode 100644
index 0000000..8931dc3
--- /dev/null
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/MooringCommonsAncillaryInstrumentationImportAction.java
@@ -0,0 +1,66 @@
+package fr.ifremer.echobase.services.service.importdata.actions;
+
+/*
+ * #%L
+ * EchoBase :: Services
+ * %%
+ * Copyright (C) 2011 - 2016 Ifremer, Codelutin
+ * %%
+ * 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.
+ *=20
+ * 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.
+ *=20
+ * 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%
+ */
+
+import fr.ifremer.echobase.entities.data.DataAcousticProvider;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsAncillaryInstrumentationImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsAncillaryInstrumentationImportDataContext;
+import fr.ifremer.echobase.services.service.importdata.csv.MooringCommonsAnc=
illaryInstrumentationImportExportModel;
+import fr.ifremer.echobase.services.service.importdata.csv.MooringCommonsAnc=
illaryInstrumentationImportRow;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author Julien Ruchaud - ruchaud@codelutin.com
+ * @since 4.0
+ */
+public class MooringCommonsAncillaryInstrumentationImportAction extends Impo=
rtAncillaryInstrumentationActionSupport<MooringCommonsAncillaryInstrumentatio=
nImportConfiguration, MooringCommonsAncillaryInstrumentationImportDataContext=
, MooringCommonsAncillaryInstrumentationImportRow> {
+
+    /** Logger. */
+    private static final Log log =3D LogFactory.getLog(MooringCommonsAncilla=
ryInstrumentationImportAction.class);
+
+    public MooringCommonsAncillaryInstrumentationImportAction(MooringCommons=
AncillaryInstrumentationImportDataContext importDataContext) {
+        super(importDataContext, importDataContext.getConfiguration().getAnc=
illaryInstrumentationFile());
+    }
+
+    @Override
+    protected MooringCommonsAncillaryInstrumentationImportRow newImportedRow=
(DataAcousticProvider provider, AncillaryInstrumentation ancillaryInstrumenta=
tion) {
+        return MooringCommonsAncillaryInstrumentationImportRow.of(provider, =
ancillaryInstrumentation);
+    }
+
+    @Override
+    protected DataAcousticProvider getDataProvider(MooringCommonsAncillaryIn=
strumentationImportDataContext importDataContext) {
+        return importDataContext.getMooring();
+    }
+
+    @Override
+    protected MooringCommonsAncillaryInstrumentationImportExportModel create=
CsvImportModel(MooringCommonsAncillaryInstrumentationImportDataContext import=
DataContext) {
+        return MooringCommonsAncillaryInstrumentationImportExportModel.forIm=
port(importDataContext);
+    }
+
+    @Override
+    protected MooringCommonsAncillaryInstrumentationImportExportModel create=
CsvExportModel(MooringCommonsAncillaryInstrumentationImportDataContext import=
DataContext) {
+        return MooringCommonsAncillaryInstrumentationImportExportModel.forEx=
port(importDataContext);
+    }
+
+}
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/actions/MooringCommonsImportDataActionSupport.java b/echobase=
-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actio=
ns/MooringCommonsImportDataActionSupport.java
index 65ef1ac..d5997d7 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/MooringCommonsImportDataActionSupport.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/MooringCommonsImportDataActionSupport.java
@@ -22,17 +22,17 @@ package fr.ifremer.echobase.services.service.importdata.a=
ctions;
  */
=20
 import fr.ifremer.echobase.io.InputFile;
-import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsImportConfiguration;
-import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsImportDataContext;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsMooringImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsMooringImportDataContext;
=20
 /**
  * Created on 30/03/16.
  *
  * @author Julien Ruchaud - ruchaud@codelutin.com
  */
-public abstract class MooringCommonsImportDataActionSupport<E> extends Impor=
tDataActionSupport<MooringCommonsImportConfiguration, MooringCommonsImportDat=
aContext, E> {
+public abstract class MooringCommonsImportDataActionSupport<E> extends Impor=
tDataActionSupport<MooringCommonsMooringImportConfiguration, MooringCommonsMo=
oringImportDataContext, E> {
=20
-    protected MooringCommonsImportDataActionSupport(MooringCommonsImportData=
Context importDataContext, InputFile inputFile) {
+    protected MooringCommonsImportDataActionSupport(MooringCommonsMooringImp=
ortDataContext importDataContext, InputFile inputFile) {
         super(importDataContext, inputFile);
     }
=20
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/actions/MooringCommonsMooringImportAction.java b/echobase-ser=
vices/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/M=
ooringCommonsMooringImportAction.java
index f95301c..79ca3a8 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/MooringCommonsMooringImportAction.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/MooringCommonsMooringImportAction.java
@@ -26,8 +26,8 @@ import fr.ifremer.echobase.entities.data.Mooring;
 import fr.ifremer.echobase.io.InputFile;
 import fr.ifremer.echobase.services.service.importdata.DuplicatedMooringExce=
ption;
 import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult;
-import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsImportDataContext;
-import fr.ifremer.echobase.services.service.importdata.csv.MooringCommonsImp=
ortExportModel;
+import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsMooringImportDataContext;
+import fr.ifremer.echobase.services.service.importdata.csv.MooringCommonsMoo=
ringImportExportModel;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.nuiton.csv.Import;
@@ -45,22 +45,22 @@ public class MooringCommonsMooringImportAction extends Mo=
oringCommonsImportDataA
     /** Logger. */
     private static final Log log =3D LogFactory.getLog(MooringCommonsMooring=
ImportAction.class);
=20
-    public MooringCommonsMooringImportAction(MooringCommonsImportDataContext=
 importDataContext) {
+    public MooringCommonsMooringImportAction(MooringCommonsMooringImportData=
Context importDataContext) {
         super(importDataContext, importDataContext.getConfiguration().getMoo=
ringFile());
     }
=20
     @Override
-    protected MooringCommonsImportExportModel createCsvImportModel(MooringCo=
mmonsImportDataContext importDataContext) {
-        return MooringCommonsImportExportModel.forImport(importDataContext);
+    protected MooringCommonsMooringImportExportModel createCsvImportModel(Mo=
oringCommonsMooringImportDataContext importDataContext) {
+        return MooringCommonsMooringImportExportModel.forImport(importDataCo=
ntext);
     }
=20
     @Override
-    protected MooringCommonsImportExportModel createCsvExportModel(MooringCo=
mmonsImportDataContext importDataContext) {
-        return MooringCommonsImportExportModel.forExport(importDataContext);
+    protected MooringCommonsMooringImportExportModel createCsvExportModel(Mo=
oringCommonsMooringImportDataContext importDataContext) {
+        return MooringCommonsMooringImportExportModel.forExport(importDataCo=
ntext);
     }
=20
     @Override
-    public void performImport(MooringCommonsImportDataContext importDataCont=
ext, InputFile inputFile, ImportDataFileResult result) {
+    public void performImport(MooringCommonsMooringImportDataContext importD=
ataContext, InputFile inputFile, ImportDataFileResult result) {
         if (log.isInfoEnabled()) {
             log.info("Starts import of mooring from file " + inputFile.getFi=
leName());
         }
@@ -89,7 +89,7 @@ public class MooringCommonsMooringImportAction extends Moor=
ingCommonsImportDataA
     }
=20
     @Override
-    protected void computeImportedExport(MooringCommonsImportDataContext imp=
ortDataContext, ImportDataFileResult result) {
+    protected void computeImportedExport(MooringCommonsMooringImportDataCont=
ext importDataContext, ImportDataFileResult result) {
=20
         for (Mooring mooring : getImportedEntities(Mooring.class, result)) {
=20
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/actions/VoyageResultsRegionAssociationImportAction.java b/ech=
obase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/=
actions/VoyageResultsRegionAssociationImportAction.java
index c297e8d..b3f0aef 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/VoyageResultsRegionAssociationImportAction.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/actions/VoyageResultsRegionAssociationImportAction.java
@@ -65,7 +65,6 @@ public class VoyageResultsRegionAssociationImportAction ext=
ends VoyageResultsImp
=20
     @Override
     protected void performImport(VoyageResultsImportDataContext importDataCo=
ntext, InputFile inputFile, ImportDataFileResult result) {
-
         if (log.isInfoEnabled()) {
             log.info("Starts import of Region cells association from file " =
+ inputFile.getFileName());
         }
@@ -86,11 +85,8 @@ public class VoyageResultsRegionAssociationImportAction ex=
tends VoyageResultsImp
=20
                 addProcessedRow(result, row);
                 regionCellIds.add(regionCell.getTopiaId());
-
             }
-
         }
-
     }
=20
     @Override
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/configurations/MooringCommonsImportConfiguration.java b/echob=
ase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/co=
nfigurations/MooringCommonsAncillaryInstrumentationImportConfiguration.java
similarity index 66%
copy from echobase-services/src/main/java/fr/ifremer/echobase/services/servic=
e/importdata/configurations/MooringCommonsImportConfiguration.java
copy to echobase-services/src/main/java/fr/ifremer/echobase/services/service/=
importdata/configurations/MooringCommonsAncillaryInstrumentationImportConfigu=
ration.java
index 7e16fc1..30298ce 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/MooringCommonsImportConfiguration.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/MooringCommonsAncillaryInstrumentationImportConfigura=
tion.java
@@ -29,25 +29,25 @@ import static org.nuiton.i18n.I18n.l;
  * Configuration mooring import.
  *
  * @author Julien Ruchaud - ruchaud@codelutin.com
- * @since 0.4
+ * @since 4.0
  */
-public class MooringCommonsImportConfiguration extends MooringImportDataConf=
igurationSupport {
+public class MooringCommonsAncillaryInstrumentationImportConfiguration exten=
ds MooringImportDataConfigurationSupport {
=20
     private static final long serialVersionUID =3D 1L;
    =20
-    protected final InputFile mooringFile;
+    protected final InputFile ancillaryInstrumentationFile;
=20
-    public MooringCommonsImportConfiguration(Locale locale) {
-        mooringFile =3D InputFile.newFile(l(locale, "echobase.common.mooring=
File"));
-        importType =3D ImportType.MOORING_COMMONS;
+    public MooringCommonsAncillaryInstrumentationImportConfiguration(Locale =
locale) {
+        ancillaryInstrumentationFile =3D InputFile.newFile(l(locale, "echoba=
se.common.ancillaryInstrumentationFile"));
+        importType =3D ImportType.MOORING_ANCILLARY_INSTRUMENTATION;
     }
=20
-    public InputFile getMooringFile() {
-        return mooringFile;
+    public InputFile getAncillaryInstrumentationFile() {
+        return ancillaryInstrumentationFile;
     }
=20
     @Override
     public InputFile[] getInputFiles() {
-        return new InputFile[]{mooringFile};
+        return new InputFile[]{ancillaryInstrumentationFile};
     }
 }
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/configurations/MooringCommonsImportConfiguration.java b/echob=
ase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/co=
nfigurations/MooringCommonsMooringImportConfiguration.java
similarity index 89%
rename from echobase-services/src/main/java/fr/ifremer/echobase/services/serv=
ice/importdata/configurations/MooringCommonsImportConfiguration.java
rename to echobase-services/src/main/java/fr/ifremer/echobase/services/servic=
e/importdata/configurations/MooringCommonsMooringImportConfiguration.java
index 7e16fc1..8f1f48f 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/MooringCommonsImportConfiguration.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/MooringCommonsMooringImportConfiguration.java
@@ -29,15 +29,15 @@ import static org.nuiton.i18n.I18n.l;
  * Configuration mooring import.
  *
  * @author Julien Ruchaud - ruchaud@codelutin.com
- * @since 0.4
+ * @since 4.0
  */
-public class MooringCommonsImportConfiguration extends MooringImportDataConf=
igurationSupport {
+public class MooringCommonsMooringImportConfiguration extends MooringImportD=
ataConfigurationSupport {
=20
     private static final long serialVersionUID =3D 1L;
    =20
     protected final InputFile mooringFile;
=20
-    public MooringCommonsImportConfiguration(Locale locale) {
+    public MooringCommonsMooringImportConfiguration(Locale locale) {
         mooringFile =3D InputFile.newFile(l(locale, "echobase.common.mooring=
File"));
         importType =3D ImportType.MOORING_COMMONS;
     }
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/configurations/MooringImportDataConfigurationSupport.java b/e=
chobase-services/src/main/java/fr/ifremer/echobase/services/service/importdat=
a/configurations/MooringImportDataConfigurationSupport.java
index 75f0fa4..02dbb6d 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/MooringImportDataConfigurationSupport.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/MooringImportDataConfigurationSupport.java
@@ -24,7 +24,7 @@ package fr.ifremer.echobase.services.service.importdata.con=
figurations;
  * Common import data configuration for mooring.
  *
  * @author Julien Ruchaud - ruchaud@codelutin.com
- * @since 0.4
+ * @since 4.0
  */
 public abstract class MooringImportDataConfigurationSupport extends ImportDa=
taConfigurationSupport {
=20
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/configurations/VoyageCommonsImportConfiguration.java b/echoba=
se-services/src/main/java/fr/ifremer/echobase/services/service/importdata/con=
figurations/VoyageCommonsImportConfiguration.java
index e435853..9b3aaf3 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/VoyageCommonsImportConfiguration.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/configurations/VoyageCommonsImportConfiguration.java
@@ -41,6 +41,8 @@ public class VoyageCommonsImportConfiguration extends Voyag=
eImportDataConfigurat
     protected final InputFile transitFile;
     /** Transect file to import. */
     protected final InputFile transectFile;
+    /** Ancillary instrumentation file to import. */
+    protected final InputFile ancillaryInstrumentationFile;
     /** Selected mission id to use in voyage. */
     protected String missionId;
     /** Selected area of operation to use for voyage. */
@@ -62,6 +64,7 @@ public class VoyageCommonsImportConfiguration extends Voyag=
eImportDataConfigurat
         voyageFile =3D InputFile.newFile(l(locale, "echobase.common.voyageFi=
le"));
         transitFile =3D InputFile.newFile(l(locale, "echobase.common.transit=
File"));
         transectFile =3D InputFile.newFile(l(locale, "echobase.common.transe=
ctFile"));
+        ancillaryInstrumentationFile =3D InputFile.newFile(l(locale, "echoba=
se.common.ancillaryInstrumentationFile"));
     }
=20
     public String getMissionId() {
@@ -140,8 +143,12 @@ public class VoyageCommonsImportConfiguration extends Vo=
yageImportDataConfigurat
         return transectFile;
     }
=20
+    public InputFile getAncillaryInstrumentationFile() {
+        return ancillaryInstrumentationFile;
+    }
+   =20
     @Override
     public InputFile[] getInputFiles() {
-        return new InputFile[]{voyageFile, transitFile, transectFile};
+        return new InputFile[]{voyageFile, transitFile, transectFile, ancill=
aryInstrumentationFile};
     }
 }
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/contexts/ImportDataContextSupport.java b/echobase-services/sr=
c/main/java/fr/ifremer/echobase/services/service/importdata/contexts/ImportDa=
taContextSupport.java
index 4beb532..b594846 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/contexts/ImportDataContextSupport.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/contexts/ImportDataContextSupport.java
@@ -28,6 +28,8 @@ import fr.ifremer.echobase.entities.references.AcousticInst=
rument;
 import fr.ifremer.echobase.entities.references.AcousticInstruments;
 import fr.ifremer.echobase.entities.references.AgeCategories;
 import fr.ifremer.echobase.entities.references.AgeCategory;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentations;
 import fr.ifremer.echobase.entities.references.CellType;
 import fr.ifremer.echobase.entities.references.CellTypes;
 import fr.ifremer.echobase.entities.references.DataMetadata;
@@ -84,6 +86,7 @@ public abstract class ImportDataContextSupport<C extends Im=
portDataConfiguration
     private final EchoBaseUser user;
     private final ImportLog importLog;
=20
+    // Referential
     private Map<String, Vessel> vesselsByName;
     private Map<String, Gear> gearsByCasinoGearName;
     private Map<String, DepthStratum> depthStratumsById;
@@ -101,6 +104,7 @@ public abstract class ImportDataContextSupport<C extends =
ImportDataConfiguration
     private Map<String, AgeCategory> ageCategoriesByName;
     private Map<String, Port> portsByCode;
     private Map<String, Mission> missionByName;
+    private Map<String, AncillaryInstrumentation> ancillaryInstrumentationsB=
yName;
=20
     private CellType esduCellType;
     private CellType elementaryCellType;
@@ -264,6 +268,13 @@ public abstract class ImportDataContextSupport<C extends=
 ImportDataConfiguration
         }
         return dataMetadatasByName;
     }
+   =20
+    public final Map<String, AncillaryInstrumentation> getAncillaryInstrumen=
tationsByName() {
+        if (ancillaryInstrumentationsByName =3D=3D null) {
+            ancillaryInstrumentationsByName =3D persistenceService.getEntiti=
esMap(AncillaryInstrumentation.class, AncillaryInstrumentations.ANCILLARY_INS=
TRUMENTATION_NAME);
+        }
+        return ancillaryInstrumentationsByName;
+    }
=20
     public final Locale getLocale() {
         return locale;
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/contexts/MooringCommonsImportDataContext.java b/echobase-serv=
ices/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/M=
ooringCommonsAncillaryInstrumentationImportDataContext.java
similarity index 50%
copy from echobase-services/src/main/java/fr/ifremer/echobase/services/servic=
e/importdata/contexts/MooringCommonsImportDataContext.java
copy to echobase-services/src/main/java/fr/ifremer/echobase/services/service/=
importdata/contexts/MooringCommonsAncillaryInstrumentationImportDataContext.j=
ava
index 2fae937..df421d0 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/contexts/MooringCommonsImportDataContext.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/contexts/MooringCommonsAncillaryInstrumentationImportDataContext.java
@@ -21,26 +21,49 @@ package fr.ifremer.echobase.services.service.importdata.c=
ontexts;
  * #L%
  */
=20
+import com.google.common.collect.Maps;
 import fr.ifremer.echobase.entities.EchoBaseUser;
+import fr.ifremer.echobase.entities.data.Mooring;
+import fr.ifremer.echobase.entities.data.Moorings;
 import fr.ifremer.echobase.services.service.UserDbPersistenceService;
-import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsAncillaryInstrumentationImportConfiguration;
+import java.util.Collections;
=20
 import java.util.Date;
 import java.util.Locale;
+import java.util.Map;
=20
 /**
  * @author Julien Ruchaud - ruchaud@codelutin.com
- * @since 0.4
+ * @since 4.O
  */
-public class MooringCommonsImportDataContext extends ImportDataContextSuppor=
t<MooringCommonsImportConfiguration> {
+public class MooringCommonsAncillaryInstrumentationImportDataContext extends=
 ImportDataContextSupport<MooringCommonsAncillaryInstrumentationImportConfigu=
ration> {
=20
-    public MooringCommonsImportDataContext(UserDbPersistenceService persiste=
nceService, Locale locale, char csvSeparator, MooringCommonsImportConfigurati=
on configuration, EchoBaseUser user, Date importDate) {
+    private Mooring mooring;
+   =20
+    private Map<String, Mooring> mooringsByCode;
+   =20
+    public MooringCommonsAncillaryInstrumentationImportDataContext(UserDbPer=
sistenceService persistenceService, Locale locale, char csvSeparator, Mooring=
CommonsAncillaryInstrumentationImportConfiguration configuration, EchoBaseUse=
r user, Date importDate) {
         super(persistenceService, locale, csvSeparator, configuration, user,=
 importDate);
     }
+   =20
+    public final Mooring getMooring() {
+        if (mooring =3D=3D null) {
+            mooring =3D persistenceService.getMooring(configuration.getMoori=
ngId());
+        }
+        return mooring;
+    }
=20
     @Override
     public String getEntityId() {
-        return null;
+        return configuration.getMooringId();
+    }
+
+    public final Map<String, Mooring> getMooringsByCode() {
+        if (mooringsByCode =3D=3D null) {
+            mooringsByCode =3D Maps.uniqueIndex(Collections.singletonList(ge=
tMooring()), Moorings.MOORING_CODE);
+        }
+        return mooringsByCode;
     }
=20
 }
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/contexts/MooringCommonsImportDataContext.java b/echobase-serv=
ices/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/M=
ooringCommonsMooringImportDataContext.java
similarity index 75%
rename from echobase-services/src/main/java/fr/ifremer/echobase/services/serv=
ice/importdata/contexts/MooringCommonsImportDataContext.java
rename to echobase-services/src/main/java/fr/ifremer/echobase/services/servic=
e/importdata/contexts/MooringCommonsMooringImportDataContext.java
index 2fae937..0a00fdb 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/contexts/MooringCommonsImportDataContext.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/contexts/MooringCommonsMooringImportDataContext.java
@@ -23,18 +23,18 @@ package fr.ifremer.echobase.services.service.importdata.c=
ontexts;
=20
 import fr.ifremer.echobase.entities.EchoBaseUser;
 import fr.ifremer.echobase.services.service.UserDbPersistenceService;
-import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsMooringImportConfiguration;
=20
 import java.util.Date;
 import java.util.Locale;
=20
 /**
  * @author Julien Ruchaud - ruchaud@codelutin.com
- * @since 0.4
+ * @since 4.0
  */
-public class MooringCommonsImportDataContext extends ImportDataContextSuppor=
t<MooringCommonsImportConfiguration> {
+public class MooringCommonsMooringImportDataContext extends ImportDataContex=
tSupport<MooringCommonsMooringImportConfiguration> {
=20
-    public MooringCommonsImportDataContext(UserDbPersistenceService persiste=
nceService, Locale locale, char csvSeparator, MooringCommonsImportConfigurati=
on configuration, EchoBaseUser user, Date importDate) {
+    public MooringCommonsMooringImportDataContext(UserDbPersistenceService p=
ersistenceService, Locale locale, char csvSeparator, MooringCommonsMooringImp=
ortConfiguration configuration, EchoBaseUser user, Date importDate) {
         super(persistenceService, locale, csvSeparator, configuration, user,=
 importDate);
     }
=20
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/contexts/VoyageImportDataContextSupport.java b/echobase-servi=
ces/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/Vo=
yageImportDataContextSupport.java
index 17f5b46..28a14c1 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/contexts/VoyageImportDataContextSupport.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/contexts/VoyageImportDataContextSupport.java
@@ -24,10 +24,6 @@ package fr.ifremer.echobase.services.service.importdata.co=
ntexts;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.Maps;
 import fr.ifremer.echobase.entities.EchoBaseUser;
-import fr.ifremer.echobase.entities.data.Cell;
-import fr.ifremer.echobase.entities.data.Cells;
-import fr.ifremer.echobase.entities.data.Echotype;
-import fr.ifremer.echobase.entities.data.Echotypes;
 import fr.ifremer.echobase.entities.data.Operation;
 import fr.ifremer.echobase.entities.data.Operations;
 import fr.ifremer.echobase.entities.data.Voyage;
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/csv/AcousticImportExportModel.java b/echobase-services/src/ma=
in/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportExp=
ortModel.java
index 6f44d2b..77f8fe8 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/AcousticImportExportModel.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/AcousticImportExportModel.java
@@ -34,7 +34,7 @@ import fr.ifremer.echobase.services.service.importdata.cont=
exts.ImportDataContex
  * {@link DataProcessing}, {@link Cell} and {@link Data}.
  *
  * @author Julien Ruchaud - ruchaud@codelutin.com
- * @since 0.5
+ * @since 4.0
  */
 public class AcousticImportExportModel extends EchoBaseImportExportModelSupp=
ort<AcousticImportRow> {
=20
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/csv/AncillaryInstrumentationImportRow.java b/echobase-service=
s/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/Ancillary=
InstrumentationImportRow.java
new file mode 100644
index 0000000..8c127b9
--- /dev/null
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/AncillaryInstrumentationImportRow.java
@@ -0,0 +1,57 @@
+/*
+ * #%L
+ * EchoBase :: Services
+ * %%
+ * Copyright (C) 2011 - 2012 Ifremer, Codelutin
+ * %%
+ * 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.
+ *=20
+ * 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.
+ *=20
+ * 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.echobase.services.service.importdata.csv;
+
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentationImpl;
+import fr.ifremer.echobase.services.csv.ProviderAble;
+
+import java.io.Serializable;
+import org.nuiton.topia.persistence.TopiaEntity;
+
+/**
+ * @author Julien Ruchaud - ruchaud@codelutin.com
+ * @since 4.0
+ */
+public abstract class AncillaryInstrumentationImportRow<E extends TopiaEntit=
y> implements Serializable, ProviderAble<E> {
+
+    private static final long serialVersionUID =3D 1L;
+
+    public static final String PROPERTY_ANCILLARY_INSTRUMENTATION =3D "ancil=
laryInstrumentation";
+
+    protected AncillaryInstrumentation ancillaryInstrumentation;
+   =20
+    public AncillaryInstrumentationImportRow() {
+        this(new AncillaryInstrumentationImpl());
+    }
+
+    public AncillaryInstrumentationImportRow(AncillaryInstrumentation ancill=
aryInstrumentation) {
+        this.ancillaryInstrumentation =3D ancillaryInstrumentation;
+    }
+
+    public AncillaryInstrumentation getAncillaryInstrumentation() {
+        return ancillaryInstrumentation;
+    }
+
+    public void setAncillaryInstrumentation(AncillaryInstrumentation ancilla=
ryInstrumentation) {
+        this.ancillaryInstrumentation =3D ancillaryInstrumentation;
+    }
+}
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/csv/MooringCommonsAncillaryInstrumentationImportExportModel.j=
ava b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/MooringCommonsAncillaryInstrumentationImportExportModel.java
new file mode 100644
index 0000000..1086637
--- /dev/null
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/MooringCommonsAncillaryInstrumentationImportExportModel.java
@@ -0,0 +1,60 @@
+/*
+ * #%L
+ * EchoBase :: Services
+ * %%
+ * Copyright (C) 2011 - 2012 Ifremer, Codelutin
+ * %%
+ * 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.
+ *=20
+ * 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.
+ *=20
+ * 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.echobase.services.service.importdata.csv;
+
+import fr.ifremer.echobase.entities.data.Mooring;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
+import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil;
+import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsAncillaryInstrumentationImportDataContext;
+
+/**
+ * @author Julien Ruchaud - ruchaud@codelutin.com
+ * @since 4.0
+ */
+public class MooringCommonsAncillaryInstrumentationImportExportModel extends=
 EchoBaseImportExportModelSupport<MooringCommonsAncillaryInstrumentationImpor=
tRow> {
+
+    private MooringCommonsAncillaryInstrumentationImportExportModel(char sep=
arator) {
+        super(separator);
+    }
+
+    public static MooringCommonsAncillaryInstrumentationImportExportModel fo=
rImport(MooringCommonsAncillaryInstrumentationImportDataContext importDataCon=
text) {
+        MooringCommonsAncillaryInstrumentationImportExportModel model =3D ne=
w MooringCommonsAncillaryInstrumentationImportExportModel(importDataContext.g=
etCsvSeparator());
+
+        model.newForeignKeyColumn(MooringCommonsAncillaryInstrumentationImpo=
rtRow.PROPERTY_MOORING, Mooring.class, Mooring.PROPERTY_CODE, importDataConte=
xt.getMooringsByCode());
+        model.newForeignKeyColumn(MooringCommonsAncillaryInstrumentationImpo=
rtRow.PROPERTY_ANCILLARY_INSTRUMENTATION, AncillaryInstrumentation.class, Anc=
illaryInstrumentation.PROPERTY_NAME, importDataContext.getAncillaryInstrument=
ationsByName());
+
+        return model;
+    }
+
+    public static MooringCommonsAncillaryInstrumentationImportExportModel fo=
rExport(MooringCommonsAncillaryInstrumentationImportDataContext importDataCon=
text) {
+        MooringCommonsAncillaryInstrumentationImportExportModel model =3D ne=
w MooringCommonsAncillaryInstrumentationImportExportModel(importDataContext.g=
etCsvSeparator());
+
+        model.newColumnForExport(MooringCommonsAncillaryInstrumentationImpor=
tRow.PROPERTY_MOORING, EchoBaseCsvUtil.MOORING_FORMATTER);
+        model.newColumnForExport(MooringCommonsAncillaryInstrumentationImpor=
tRow.PROPERTY_ANCILLARY_INSTRUMENTATION, EchoBaseCsvUtil.ANCILLARY_INSTRUMENT=
ATION_FORMATTER);
+
+        return model;
+    }
+
+    @Override
+    public MooringCommonsAncillaryInstrumentationImportRow newEmptyInstance(=
) {
+        return new MooringCommonsAncillaryInstrumentationImportRow();
+    }
+}
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/csv/MooringCommonsAncillaryInstrumentationImportRow.java b/ec=
hobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata=
/csv/MooringCommonsAncillaryInstrumentationImportRow.java
new file mode 100644
index 0000000..38d9e9b
--- /dev/null
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/MooringCommonsAncillaryInstrumentationImportRow.java
@@ -0,0 +1,69 @@
+/*
+ * #%L
+ * EchoBase :: Services
+ * %%
+ * Copyright (C) 2011 - 2012 Ifremer, Codelutin
+ * %%
+ * 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.
+ *=20
+ * 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.
+ *=20
+ * 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.echobase.services.service.importdata.csv;
+
+import fr.ifremer.echobase.entities.data.DataAcousticProvider;
+import fr.ifremer.echobase.entities.data.Mooring;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
+
+/**
+ * @author Julien Ruchaud - ruchaud@codelutin.com
+ * @since 4.0
+ */
+public class MooringCommonsAncillaryInstrumentationImportRow extends Ancilla=
ryInstrumentationImportRow<Mooring> {
+
+    private static final long serialVersionUID =3D 1L;
+
+    public static final String PROPERTY_MOORING =3D "mooring";
+    protected Mooring mooring;
+
+    public static MooringCommonsAncillaryInstrumentationImportRow of(DataAco=
usticProvider provider, AncillaryInstrumentation ancillaryInstrumentation) {
+        MooringCommonsAncillaryInstrumentationImportRow row =3D new MooringC=
ommonsAncillaryInstrumentationImportRow(ancillaryInstrumentation);
+        row.setProvider(provider);
+        return row;
+    }
+
+    public MooringCommonsAncillaryInstrumentationImportRow() {
+        super();
+    }
+
+    public MooringCommonsAncillaryInstrumentationImportRow(AncillaryInstrume=
ntation ancillaryInstrumentation) {
+        super(ancillaryInstrumentation);
+    }
+
+    public Mooring getMooring() {
+        return mooring;
+    }
+
+    public void setMooring(Mooring mooring) {
+        this.mooring =3D mooring;
+    }
+
+    @Override
+    public DataAcousticProvider<Mooring> getProvider() {
+        return mooring;
+    }
+
+    @Override
+    public void setProvider(DataAcousticProvider<Mooring> provider) {
+        this.mooring =3D provider.getEntity();
+    }
+}
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/csv/MooringCommonsImportExportModel.java b/echobase-services/=
src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringComm=
onsMooringImportExportModel.java
similarity index 85%
rename from echobase-services/src/main/java/fr/ifremer/echobase/services/serv=
ice/importdata/csv/MooringCommonsImportExportModel.java
rename to echobase-services/src/main/java/fr/ifremer/echobase/services/servic=
e/importdata/csv/MooringCommonsMooringImportExportModel.java
index 92f7017..2de9de1 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/MooringCommonsImportExportModel.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/MooringCommonsMooringImportExportModel.java
@@ -24,7 +24,7 @@ import fr.ifremer.echobase.entities.data.Mooring;
 import fr.ifremer.echobase.entities.data.MooringImpl;
 import fr.ifremer.echobase.entities.references.Mission;
 import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil;
-import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsImportDataContext;
+import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommo=
nsMooringImportDataContext;
=20
 /**
  * Model to import Mooring.
@@ -32,14 +32,14 @@ import fr.ifremer.echobase.services.service.importdata.co=
ntexts.MooringCommonsIm
  * @author Julien Ruchaud - ruchaud@codelutin.com
  * @since 4.0
  */
-public class MooringCommonsImportExportModel extends EchoBaseImportExportMod=
elSupport<Mooring> {
+public class MooringCommonsMooringImportExportModel extends EchoBaseImportEx=
portModelSupport<Mooring> {
=20
-    private MooringCommonsImportExportModel(char separator) {
+    private MooringCommonsMooringImportExportModel(char separator) {
         super(separator);
     }
=20
-    public static MooringCommonsImportExportModel forImport(MooringCommonsIm=
portDataContext importDataContext) {
-        MooringCommonsImportExportModel model =3D new MooringCommonsImportEx=
portModel(importDataContext.getCsvSeparator());
+    public static MooringCommonsMooringImportExportModel forImport(MooringCo=
mmonsMooringImportDataContext importDataContext) {
+        MooringCommonsMooringImportExportModel model =3D new MooringCommonsM=
ooringImportExportModel(importDataContext.getCsvSeparator());
        =20
         model.newForeignKeyColumn(Mooring.PROPERTY_MISSION, Mooring.PROPERTY=
_MISSION, Mission.class, Mission.PROPERTY_NAME, importDataContext.getMissionB=
yName());
         model.newMandatoryColumn(Mooring.PROPERTY_CODE);
@@ -62,8 +62,8 @@ public class MooringCommonsImportExportModel extends EchoBa=
seImportExportModelSu
         return model;
     }
=20
-    public static MooringCommonsImportExportModel forExport(MooringCommonsIm=
portDataContext importDataContext) {
-        MooringCommonsImportExportModel model =3D new MooringCommonsImportEx=
portModel(importDataContext.getCsvSeparator());
+    public static MooringCommonsMooringImportExportModel forExport(MooringCo=
mmonsMooringImportDataContext importDataContext) {
+        MooringCommonsMooringImportExportModel model =3D new MooringCommonsM=
ooringImportExportModel(importDataContext.getCsvSeparator());
=20
         model.newColumnForExport(Mooring.PROPERTY_MISSION, Mooring.PROPERTY_=
MISSION, EchoBaseCsvUtil.MISSION_FORMATTER);
         model.newColumnForExport(Mooring.PROPERTY_CODE);
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/csv/VoyageCommonsAncillaryInstrumentationImportExportModel.ja=
va b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/imp=
ortdata/csv/VoyageCommonsAncillaryInstrumentationImportExportModel.java
new file mode 100644
index 0000000..f32a7cb
--- /dev/null
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/VoyageCommonsAncillaryInstrumentationImportExportModel.java
@@ -0,0 +1,60 @@
+/*
+ * #%L
+ * EchoBase :: Services
+ * %%
+ * Copyright (C) 2011 - 2012 Ifremer, Codelutin
+ * %%
+ * 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.
+ *=20
+ * 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.
+ *=20
+ * 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.echobase.services.service.importdata.csv;
+
+import fr.ifremer.echobase.entities.data.Voyage;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
+import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil;
+import fr.ifremer.echobase.services.service.importdata.contexts.VoyageCommon=
sImportDataContext;
+
+/**
+ * @author Julien Ruchaud - ruchaud@codelutin.com
+ * @since 4.0
+ */
+public class VoyageCommonsAncillaryInstrumentationImportExportModel extends =
EchoBaseImportExportModelSupport<VoyageCommonsAncillaryInstrumentationImportR=
ow> {
+
+    private VoyageCommonsAncillaryInstrumentationImportExportModel(char sepa=
rator) {
+        super(separator);
+    }
+
+    public static VoyageCommonsAncillaryInstrumentationImportExportModel for=
Import(VoyageCommonsImportDataContext importDataContext) {
+        VoyageCommonsAncillaryInstrumentationImportExportModel model =3D new=
 VoyageCommonsAncillaryInstrumentationImportExportModel(importDataContext.get=
CsvSeparator());
+
+        model.newForeignKeyColumn(VoyageCommonsAncillaryInstrumentationImpor=
tRow.PROPERTY_VOYAGE, Voyage.class, Voyage.PROPERTY_NAME, importDataContext.g=
etVoyagesByName());
+        model.newForeignKeyColumn(VoyageCommonsAncillaryInstrumentationImpor=
tRow.PROPERTY_ANCILLARY_INSTRUMENTATION, AncillaryInstrumentation.class, Anci=
llaryInstrumentation.PROPERTY_NAME, importDataContext.getAncillaryInstrumenta=
tionsByName());
+
+        return model;
+    }
+
+    public static VoyageCommonsAncillaryInstrumentationImportExportModel for=
Export(VoyageCommonsImportDataContext importDataContext) {
+        VoyageCommonsAncillaryInstrumentationImportExportModel model =3D new=
 VoyageCommonsAncillaryInstrumentationImportExportModel(importDataContext.get=
CsvSeparator());
+
+        model.newColumnForExport(VoyageCommonsAncillaryInstrumentationImport=
Row.PROPERTY_VOYAGE, EchoBaseCsvUtil.VOYAGE_FORMATTER);
+        model.newColumnForExport(VoyageCommonsAncillaryInstrumentationImport=
Row.PROPERTY_ANCILLARY_INSTRUMENTATION, EchoBaseCsvUtil.ANCILLARY_INSTRUMENTA=
TION_FORMATTER);
+
+        return model;
+    }
+
+    @Override
+    public VoyageCommonsAncillaryInstrumentationImportRow newEmptyInstance()=
 {
+        return new VoyageCommonsAncillaryInstrumentationImportRow();
+    }
+}
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/importdata/csv/VoyageCommonsAncillaryInstrumentationImportRow.java b/ech=
obase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/=
csv/VoyageCommonsAncillaryInstrumentationImportRow.java
new file mode 100644
index 0000000..68c43fb
--- /dev/null
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/im=
portdata/csv/VoyageCommonsAncillaryInstrumentationImportRow.java
@@ -0,0 +1,70 @@
+/*
+ * #%L
+ * EchoBase :: Services
+ * %%
+ * Copyright (C) 2011 - 2012 Ifremer, Codelutin
+ * %%
+ * 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.
+ *=20
+ * 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.
+ *=20
+ * 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.echobase.services.service.importdata.csv;
+
+import fr.ifremer.echobase.entities.data.DataAcousticProvider;
+import fr.ifremer.echobase.entities.data.Voyage;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
+
+/**
+ * @author Julien Ruchaud - ruchaud@codelutin.com
+ * @since 4.0
+ */
+public class VoyageCommonsAncillaryInstrumentationImportRow extends Ancillar=
yInstrumentationImportRow<Voyage> {
+
+    private static final long serialVersionUID =3D 1L;
+
+    public static final String PROPERTY_VOYAGE =3D "voyage";
+
+    protected Voyage voyage;
+
+    public static VoyageCommonsAncillaryInstrumentationImportRow of(DataAcou=
sticProvider provider, AncillaryInstrumentation ancillaryInstrumentation) {
+        VoyageCommonsAncillaryInstrumentationImportRow row =3D new VoyageCom=
monsAncillaryInstrumentationImportRow(ancillaryInstrumentation);
+        row.setProvider(provider);
+        return row;
+    }
+
+    public VoyageCommonsAncillaryInstrumentationImportRow() {
+        super();
+    }
+
+    public VoyageCommonsAncillaryInstrumentationImportRow(AncillaryInstrumen=
tation ancillaryInstrumentation) {
+        super(ancillaryInstrumentation);
+    }
+   =20
+    public Voyage getVoyage() {
+        return voyage;
+    }
+
+    public void setVoyage(Voyage voyage) {
+        this.voyage =3D voyage;
+    }
+
+    @Override
+    public DataAcousticProvider<Voyage> getProvider() {
+        return voyage;
+    }
+
+    @Override
+    public void setProvider(DataAcousticProvider<Voyage> provider) {
+        this.voyage =3D provider.getEntity();
+    }
+}
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/removedata/RemoveDataService.java b/echobase-services/src/main/java/fr/i=
fremer/echobase/services/service/removedata/RemoveDataService.java
index ebf8ee6..9a612da 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/re=
movedata/RemoveDataService.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/re=
movedata/RemoveDataService.java
@@ -41,7 +41,7 @@ import fr.ifremer.echobase.services.service.removedata.stra=
tegy.CommonAllRemoveD
 import fr.ifremer.echobase.services.service.removedata.strategy.CommonTranse=
ctRemoveDataStrategy;
 import fr.ifremer.echobase.services.service.removedata.strategy.CommonTransi=
tRemoveDataStrategy;
 import fr.ifremer.echobase.services.service.removedata.strategy.CommonVoyage=
RemoveDataStrategy;
-import fr.ifremer.echobase.services.service.removedata.strategy.DummyMooring=
RemoveDataStrategy;
+import fr.ifremer.echobase.services.service.removedata.strategy.DummyRemoveD=
ataStrategy;
 import fr.ifremer.echobase.services.service.removedata.strategy.LegacyVoyage=
RemoveDataStrategy;
 import fr.ifremer.echobase.services.service.removedata.strategy.MooringAcous=
ticRemoveDataStrategy;
 import fr.ifremer.echobase.services.service.removedata.strategy.MooringRemov=
eDataStrategy;
@@ -283,6 +283,7 @@ public class RemoveDataService extends EchoBaseServiceSup=
port {
             strategies.put(ImportType.COMMON_VOYAGE, CommonVoyageRemoveDataS=
trategy.class);
             strategies.put(ImportType.COMMON_TRANSIT, CommonTransitRemoveDat=
aStrategy.class);
             strategies.put(ImportType.COMMON_TRANSECT, CommonTransectRemoveD=
ataStrategy.class);
+            strategies.put(ImportType.COMMON_ANCILLARY_INSTRUMENTATION, Dumm=
yRemoveDataStrategy.class);
             strategies.put(ImportType.OPERATION, OperationRemoveDataStrategy=
.class);
             strategies.put(ImportType.CATCHES, CatchesRemoveDataStrategy.cla=
ss);
             strategies.put(ImportType.ACOUSTIC, AcousticRemoveDataStrategy.c=
lass);
@@ -292,9 +293,10 @@ public class RemoveDataService extends EchoBaseServiceSu=
pport {
             strategies.put(ImportType.RESULT_MAP_OTHER, ResultMapOtherRemove=
DataStrategy.class);
             strategies.put(ImportType.RESULT_REGION, ResultRegionRemoveDataS=
trategy.class);
             strategies.put(ImportType.MOORING_COMMONS, MooringRemoveDataStra=
tegy.class);
+            strategies.put(ImportType.MOORING_ANCILLARY_INSTRUMENTATION, Dum=
myRemoveDataStrategy.class);
             strategies.put(ImportType.MOORING_ACOUSTIC, MooringAcousticRemov=
eDataStrategy.class);
-            strategies.put(ImportType.RESULT_MOORING, DummyMooringRemoveData=
Strategy.class);
-            strategies.put(ImportType.RESULT_MOORING_ESDU, DummyMooringRemov=
eDataStrategy.class);
+            strategies.put(ImportType.RESULT_MOORING, DummyRemoveDataStrateg=
y.class);
+            strategies.put(ImportType.RESULT_MOORING_ESDU, DummyRemoveDataSt=
rategy.class);
             Preconditions.checkState(
                     ImportType.values().length =3D=3D strategies.size(),
                     "It miss some remove data strategies...");
diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/ser=
vice/removedata/strategy/DummyMooringRemoveDataStrategy.java b/echobase-servi=
ces/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/Du=
mmyRemoveDataStrategy.java
similarity index 77%
rename from echobase-services/src/main/java/fr/ifremer/echobase/services/serv=
ice/removedata/strategy/DummyMooringRemoveDataStrategy.java
rename to echobase-services/src/main/java/fr/ifremer/echobase/services/servic=
e/removedata/strategy/DummyRemoveDataStrategy.java
index f437124..abf2934 100644
--- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/re=
movedata/strategy/DummyMooringRemoveDataStrategy.java
+++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/re=
movedata/strategy/DummyRemoveDataStrategy.java
@@ -24,7 +24,6 @@ package fr.ifremer.echobase.services.service.removedata.str=
ategy;
 import com.google.common.collect.Sets;
 import fr.ifremer.echobase.entities.ImportLog;
 import fr.ifremer.echobase.entities.ImportType;
-import fr.ifremer.echobase.entities.data.Mooring;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.nuiton.topia.persistence.TopiaException;
@@ -36,20 +35,20 @@ import fr.ifremer.echobase.entities.data.DataAcousticProv=
ider;
  * @author Julien Ruchaud - ruchaud@codelutin.com
  * @since 4.0
  */
-public class DummyMooringRemoveDataStrategy extends AbstractRemoveDataStrate=
gy<Mooring> {
+public class DummyRemoveDataStrategy extends AbstractRemoveDataStrategy {
=20
     /** Logger. */
-    private static final Log log =3D LogFactory.getLog(DummyMooringRemoveDat=
aStrategy.class);
+    private static final Log log =3D LogFactory.getLog(DummyRemoveDataStrate=
gy.class);
=20
=20
     @Override
-    public long computeNbSteps(DataAcousticProvider<Mooring> provider, Impor=
tLog importLog) {
+    public long computeNbSteps(DataAcousticProvider provider, ImportLog impo=
rtLog) {
         long result =3D getImportFileIdsCount(importLog);
         return result;
     }
=20
     @Override
-    protected void removeImportData(DataAcousticProvider<Mooring> provider, =
String id) throws TopiaException {
+    protected void removeImportData(DataAcousticProvider provider, String id=
) throws TopiaException {
     }
=20
     @Override
diff --git a/echobase-services/src/main/resources/i18n/echobase-services_en_G=
B.properties b/echobase-services/src/main/resources/i18n/echobase-services_en=
_GB.properties
index f458efc..6777c35 100644
--- a/echobase-services/src/main/resources/i18n/echobase-services_en_GB.prope=
rties
+++ b/echobase-services/src/main/resources/i18n/echobase-services_en_GB.prope=
rties
@@ -1,4 +1,5 @@
 echobase.acousticImport.cellNotImported=3DList of not imported esdu cells \:=
\n%s
+echobase.common.ancillaryInstrumentationFile=3D
 echobase.common.biometrySampleFile=3DBiometrySample file
 echobase.common.cellMapsFile=3DMap cells file
 echobase.common.cellPositionReference.end=3DEnd
@@ -33,6 +34,7 @@ echobase.common.voyageFile=3DVoyage data file
 echobase.exportError.toFile=3DAn error occured while exporting file %s=C2=A0=
\:%s
 echobase.importError.can.only.import.one.voyage.atime=3DImpossible to import=
 more that one voyage at a time
 echobase.importError.dataMetadata.notFound=3DMetadata column %s missing (exi=
sting values=C2=A0\:%s)
+echobase.importError.duplicate.echotypeAncillaryInstrumentationAssociation=3D
 echobase.importError.duplicate.echotypeSpeciesAssociation=3DLine %s - Echoty=
pe =C2=AB%s=C2=BB on voyage named =C2=AB%s=C2=BB already contains the species=
 =C2=AB%s=C2=BB.
 echobase.importError.duplicate.elementaryCell=3DLine %s - Elementary cell na=
med =C2=AB%s=C2=BB on =C2=AB%s=C2=BB already exists in database.
 echobase.importError.duplicate.esduCell=3DLine %s - ESDU cell named =C2=AB%s=
=C2=BB on =C2=AB%s=C2=BB already exists in database.
diff --git a/echobase-services/src/main/resources/i18n/echobase-services_fr_F=
R.properties b/echobase-services/src/main/resources/i18n/echobase-services_fr=
_FR.properties
index 49f2286..58e0019 100644
--- a/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.prope=
rties
+++ b/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.prope=
rties
@@ -1,4 +1,5 @@
 echobase.acousticImport.cellNotImported=3DListe des cellules ESDU non import=
=C3=A9es \:\n%s
+echobase.common.ancillaryInstrumentationFile=3D
 echobase.common.biometrySampleFile=3DFichier de biom=C3=A9tries (BiometrySam=
ple)
 echobase.common.cellMapsFile=3DFichier des cellules Cartes
 echobase.common.cellPositionReference.end=3DFin
@@ -33,6 +34,7 @@ echobase.common.voyageFile=3DFichier des donn=C3=A9es de vo=
yages
 echobase.exportError.toFile=3DErreur lors de l'extraction du fichier %s \: %s
 echobase.importError.can.only.import.one.voyage.atime=3DVous ne pouvez pas i=
mporter plus d'un voyage =C3=A0 la fois
 echobase.importError.dataMetadata.notFound=3DColonne de m=C3=A9tadonn=C3=A9e=
s nomm=C3=A9e %s non trouv=C3=A9e (valeurs existantes \: %s)
+echobase.importError.duplicate.echotypeAncillaryInstrumentationAssociation=3D
 echobase.importError.duplicate.echotypeSpeciesAssociation=3DLigne %s - L'=C3=
=A9chotype =C2=AB%s=C2=BB sur la mar=C3=A9e nomm=C3=A9e =C2=AB%s=C2=BB contie=
nt d=C3=A9j=C3=A0 l'esp=C3=A8ce =C2=AB%s=C2=BB.
 echobase.importError.duplicate.elementaryCell=3DLigne %s - La cellule =C3=A9=
l=C3=A9mentaire d'identifiant =C2=AB%s=C2=BB sur =C2=AB%s=C2=BB existe d=C3=
=A9j=C3=A0 en base.
 echobase.importError.duplicate.esduCell=3DLigne %s - La cellule ESDU d'ident=
ifiant =C2=AB%s=C2=BB sur =C2=AB%s=C2=BB existe d=C3=A9j=C3=A0 en base.
diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/Ech=
oBaseServiceFixtures.java b/echobase-services/src/test/java/fr/ifremer/echoba=
se/services/EchoBaseServiceFixtures.java
index 1f77e05..bd97004 100644
--- a/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseSe=
rviceFixtures.java
+++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseSe=
rviceFixtures.java
@@ -65,6 +65,14 @@ public class EchoBaseServiceFixtures {
         return 1;
     }
=20
+    public int NB_ANCILLAY_INSTRUMENTATION() {
+        return 3;
+    }
+
+    public int NB_PROVIDER_ANCILLAY_INSTRUMENTATION() {
+        return 2;
+    }
+
     public int NB_TRANSIT() {
         return 3;
     }
diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/Imp=
ortDataFixtures.java b/echobase-services/src/test/java/fr/ifremer/echobase/se=
rvices/ImportDataFixtures.java
index 1b6c1bf..b05ab67 100644
--- a/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportData=
Fixtures.java
+++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportData=
Fixtures.java
@@ -38,6 +38,7 @@ import fr.ifremer.echobase.entities.data.SampleData;
 import fr.ifremer.echobase.entities.data.Transect;
 import fr.ifremer.echobase.entities.data.Transit;
 import fr.ifremer.echobase.entities.data.Voyage;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
=20
 /**
  * Created on 07/04/16.
@@ -147,6 +148,7 @@ public enum ImportDataFixtures {
         @Override
         public void assertBeforeImportExisting(FakeEchoBaseServiceContext se=
rviceContext, EchoBaseServiceFixtures fixtures) {
             serviceContext.assertNbEntities(Mooring.class, fixtures.NB_MOORI=
NG_TOTAL());
+            serviceContext.assertNbEntities(AncillaryInstrumentation.class, =
fixtures.NB_ANCILLAY_INSTRUMENTATION());
         }
     };
=20
diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/ser=
vice/importdata/MooringCommonsImportServiceIT.java b/echobase-services/src/te=
st/java/fr/ifremer/echobase/services/service/importdata/MooringCommonsAncilla=
ryInstrumentationImportServiceIT.java
similarity index 53%
copy from echobase-services/src/test/java/fr/ifremer/echobase/services/servic=
e/importdata/MooringCommonsImportServiceIT.java
copy to echobase-services/src/test/java/fr/ifremer/echobase/services/service/=
importdata/MooringCommonsAncillaryInstrumentationImportServiceIT.java
index a74ad8e..721ce55 100644
--- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/im=
portdata/MooringCommonsImportServiceIT.java
+++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/im=
portdata/MooringCommonsAncillaryInstrumentationImportServiceIT.java
@@ -22,8 +22,9 @@ package fr.ifremer.echobase.services.service.importdata;
=20
 import com.google.common.collect.Iterables;
 import fr.ifremer.echobase.entities.data.Mooring;
+import fr.ifremer.echobase.entities.references.AncillaryInstrumentation;
 import fr.ifremer.echobase.services.ImportDataFixtures;
-import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsAncillaryInstrumentationImportConfiguration;
=20
 import java.io.IOException;
=20
@@ -31,15 +32,15 @@ import java.io.IOException;
  * @author Julien Ruchaud - ruchaud@codelutin.com
  * @since 4.0
  */
-public class MooringCommonsImportServiceIT extends AbstractImportDataService=
IT<MooringCommonsImportConfiguration> {
+public class MooringCommonsAncillaryInstrumentationImportServiceIT extends A=
bstractImportDataServiceIT<MooringCommonsAncillaryInstrumentationImportConfig=
uration> {
=20
-    public MooringCommonsImportServiceIT() {
+    public MooringCommonsAncillaryInstrumentationImportServiceIT() {
         super(1);
     }
=20
     @Override
     public ImportDataFixtures getImportDataFixture() {
-        return ImportDataFixtures.IMPORT_DATA_ECHOBASE_NO_DATA;
+        return ImportDataFixtures.IMPORT_DATA_ECHOBASE_MOORING;
     }
=20
     @Override
@@ -48,24 +49,25 @@ public class MooringCommonsImportServiceIT extends Abstra=
ctImportDataServiceIT<M
     }
=20
     @Override
-    protected MooringCommonsImportConfiguration createConfiguration() throws=
 IOException {
-        MooringCommonsImportConfiguration conf =3D new MooringCommonsImportC=
onfiguration(getLocale());
-        prepareInputFile(conf.getMooringFile(), getImportPath("mooring.csv.g=
z"));
+    protected MooringCommonsAncillaryInstrumentationImportConfiguration crea=
teConfiguration() throws IOException {
+        MooringCommonsAncillaryInstrumentationImportConfiguration conf =3D n=
ew MooringCommonsAncillaryInstrumentationImportConfiguration(getLocale());
+        conf.setMooringId(getMooringId());
+        prepareInputFile(conf.getAncillaryInstrumentationFile(), getImportPa=
th("ancillaryInstrumentation.csv.gz"));
         return conf;
     }
=20
     @Override
-    protected ImportDataService.MooringCommonsImportDataAction newAction() t=
hrows IOException {
-        return new ImportDataService.MooringCommonsImportDataAction();
+    protected ImportDataService.MooringCommonsAncillaryInstrumentationImport=
DataAction newAction() throws IOException {
+        return new ImportDataService.MooringCommonsAncillaryInstrumentationI=
mportDataAction();
     }
=20
     @Override
-    protected void assertAfertImport(ImportDataResult<MooringCommonsImportCo=
nfiguration> result) throws IOException {
-        int nbMooring =3D fixtures.NB_MOORING();
+    protected void assertAfertImport(ImportDataResult<MooringCommonsAncillar=
yInstrumentationImportConfiguration> result) throws IOException {
+        int nbAncillaryInstrumentation =3D fixtures.NB_ANCILLAY_INSTRUMENTAT=
ION();
+        int updated =3D fixtures.NB_PROVIDER_ANCILLAY_INSTRUMENTATION();
=20
         ImportDataFileResult importDataFileResult =3D Iterables.get(result.g=
etImportResults(), 0);
-        assertCsvImportResultPerEntity(importDataFileResult, Mooring.class, =
nbMooring, 0, nbMooring);
-        assertCsvImportResult0(importDataFileResult, nbMooring);
+        assertCsvImportResultPerEntity(importDataFileResult, AncillaryInstru=
mentation.class, 0, updated, nbAncillaryInstrumentation);
     }
=20
 }
diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/ser=
vice/importdata/MooringCommonsImportServiceIT.java b/echobase-services/src/te=
st/java/fr/ifremer/echobase/services/service/importdata/MooringCommonsMooring=
ImportServiceIT.java
similarity index 74%
rename from echobase-services/src/test/java/fr/ifremer/echobase/services/serv=
ice/importdata/MooringCommonsImportServiceIT.java
rename to echobase-services/src/test/java/fr/ifremer/echobase/services/servic=
e/importdata/MooringCommonsMooringImportServiceIT.java
index a74ad8e..9c49058 100644
--- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/im=
portdata/MooringCommonsImportServiceIT.java
+++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/im=
portdata/MooringCommonsMooringImportServiceIT.java
@@ -23,7 +23,7 @@ package fr.ifremer.echobase.services.service.importdata;
 import com.google.common.collect.Iterables;
 import fr.ifremer.echobase.entities.data.Mooring;
 import fr.ifremer.echobase.services.ImportDataFixtures;
-import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsMooringImportConfiguration;
=20
 import java.io.IOException;
=20
@@ -31,9 +31,9 @@ import java.io.IOException;
  * @author Julien Ruchaud - ruchaud@codelutin.com
  * @since 4.0
  */
-public class MooringCommonsImportServiceIT extends AbstractImportDataService=
IT<MooringCommonsImportConfiguration> {
+public class MooringCommonsMooringImportServiceIT extends AbstractImportData=
ServiceIT<MooringCommonsMooringImportConfiguration> {
=20
-    public MooringCommonsImportServiceIT() {
+    public MooringCommonsMooringImportServiceIT() {
         super(1);
     }
=20
@@ -48,19 +48,19 @@ public class MooringCommonsImportServiceIT extends Abstra=
ctImportDataServiceIT<M
     }
=20
     @Override
-    protected MooringCommonsImportConfiguration createConfiguration() throws=
 IOException {
-        MooringCommonsImportConfiguration conf =3D new MooringCommonsImportC=
onfiguration(getLocale());
+    protected MooringCommonsMooringImportConfiguration createConfiguration()=
 throws IOException {
+        MooringCommonsMooringImportConfiguration conf =3D new MooringCommons=
MooringImportConfiguration(getLocale());
         prepareInputFile(conf.getMooringFile(), getImportPath("mooring.csv.g=
z"));
         return conf;
     }
=20
     @Override
-    protected ImportDataService.MooringCommonsImportDataAction newAction() t=
hrows IOException {
-        return new ImportDataService.MooringCommonsImportDataAction();
+    protected ImportDataService.MooringCommonsMooringImportDataAction newAct=
ion() throws IOException {
+        return new ImportDataService.MooringCommonsMooringImportDataAction();
     }
=20
     @Override
-    protected void assertAfertImport(ImportDataResult<MooringCommonsImportCo=
nfiguration> result) throws IOException {
+    protected void assertAfertImport(ImportDataResult<MooringCommonsMooringI=
mportConfiguration> result) throws IOException {
         int nbMooring =3D fixtures.NB_MOORING();
=20
         ImportDataFileResult importDataFileResult =3D Iterables.get(result.g=
etImportResults(), 0);
diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/r=
emovedata/AbstractRemoveDataServiceTest.java b/echobase-services/src/test/jav=
a/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java
index bdae5bc..d093783 100644
--- a/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removeda=
ta/AbstractRemoveDataServiceTest.java
+++ b/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removeda=
ta/AbstractRemoveDataServiceTest.java
@@ -85,7 +85,7 @@ import fr.ifremer.echobase.services.ImportDataFixtures;
 import fr.ifremer.echobase.services.service.UserDbPersistenceService;
 import fr.ifremer.echobase.services.service.importdata.configurations.Import=
DataConfigurationSupport;
 import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gAcousticsImportConfiguration;
-import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsMooringImportConfiguration;
 import fr.ifremer.echobase.services.service.importdata.configurations.Voyage=
AcousticsImportConfiguration;
 import fr.ifremer.echobase.services.service.importdata.configurations.Voyage=
CatchesImportConfiguration;
 import fr.ifremer.echobase.services.service.importdata.configurations.Voyage=
CommonsImportConfiguration;
@@ -879,8 +879,7 @@ public abstract class AbstractRemoveDataServiceTest exten=
ds EchoBaseTestServiceS
=20
         persistenceContext.commit();
=20
-        importMooringId =3D createImport(
-                new MooringCommonsImportConfiguration(getLocale()),
+        importMooringId =3D createImport(new MooringCommonsMooringImportConf=
iguration(getLocale()),
                 ImportType.MOORING_COMMONS,
                 "Common/Mooring",
                 null,
diff --git a/echobase-services/src/test/resources/import-data/echobase-moorin=
g.h2.db.gz b/echobase-services/src/test/resources/import-data/echobase-moorin=
g.h2.db.gz
index 32fa1b1..fad04bc 100644
Binary files a/echobase-services/src/test/resources/import-data/echobase-moor=
ing.h2.db.gz and b/echobase-services/src/test/resources/import-data/echobase-=
mooring.h2.db.gz differ
diff --git a/echobase-services/src/test/resources/import-data/mooring/ancilla=
ryInstrumentation.csv.gz b/echobase-services/src/test/resources/import-data/m=
ooring/ancillaryInstrumentation.csv.gz
new file mode 100644
index 0000000..a56af0f
Binary files /dev/null and b/echobase-services/src/test/resources/import-data=
/mooring/ancillaryInstrumentation.csv.gz differ
diff --git a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importD=
ata/ConfigureMooringCommonsImport.java b/echobase-ui/src/main/java/fr/ifremer=
/echobase/ui/actions/importData/ConfigureMooringCommonsImport.java
index 303a951..c1abcb0 100644
--- a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/Con=
figureMooringCommonsImport.java
+++ b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/Con=
figureMooringCommonsImport.java
@@ -20,7 +20,7 @@
  */
 package fr.ifremer.echobase.ui.actions.importData;
=20
-import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsMooringImportConfiguration;
=20
 import java.io.File;
=20
@@ -30,18 +30,18 @@ import java.io.File;
  * @author Julien Ruchaud - ruchaud@codelutin.com
  * @since 0.4
  */
-public class ConfigureMooringCommonsImport extends AbstractConfigureImport<M=
ooringCommonsImportConfiguration> {
+public class ConfigureMooringCommonsImport extends AbstractConfigureImport<M=
ooringCommonsMooringImportConfiguration> {
=20
     private static final long serialVersionUID =3D 1L;
=20
=20
     public ConfigureMooringCommonsImport() {
-        super(MooringCommonsImportConfiguration.class);
+        super(MooringCommonsMooringImportConfiguration.class);
     }
=20
     @Override
-    protected MooringCommonsImportConfiguration createModel() {
-        return new MooringCommonsImportConfiguration(getLocale());
+    protected MooringCommonsMooringImportConfiguration createModel() {
+        return new MooringCommonsMooringImportConfiguration(getLocale());
     }
=20
     public void setMooringFile(File file) {
diff --git a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importD=
ata/LaunchMooringCommonsImport.java b/echobase-ui/src/main/java/fr/ifremer/ec=
hobase/ui/actions/importData/LaunchMooringCommonsImport.java
index 52b22da..006f606 100644
--- a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/Lau=
nchMooringCommonsImport.java
+++ b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/Lau=
nchMooringCommonsImport.java
@@ -24,7 +24,7 @@ import fr.ifremer.echobase.entities.EchoBaseUser;
 import fr.ifremer.echobase.services.service.importdata.ImportDataResult;
 import fr.ifremer.echobase.services.service.importdata.ImportDataService;
 import fr.ifremer.echobase.services.service.importdata.ImportException;
-import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsImportConfiguration;
+import fr.ifremer.echobase.services.service.importdata.configurations.Moorin=
gCommonsMooringImportConfiguration;
=20
 /**
  * Launch a commons data import for mooring.
@@ -32,16 +32,16 @@ import fr.ifremer.echobase.services.service.importdata.co=
nfigurations.MooringCom
  * @author Julien Ruchaud - ruchaud@codelutin.com
  * @since 4.0
  */
-public class LaunchMooringCommonsImport extends AbstractLaunchImport<Mooring=
CommonsImportConfiguration, ImportDataService> {
+public class LaunchMooringCommonsImport extends AbstractLaunchImport<Mooring=
CommonsMooringImportConfiguration, ImportDataService> {
=20
     private static final long serialVersionUID =3D 1L;
=20
     public LaunchMooringCommonsImport() {
-        super(MooringCommonsImportConfiguration.class, ImportDataService.cla=
ss);
+        super(MooringCommonsMooringImportConfiguration.class, ImportDataServ=
ice.class);
     }
=20
     @Override
-    protected ImportDataResult<MooringCommonsImportConfiguration> doImport(I=
mportDataService service, MooringCommonsImportConfiguration model, EchoBaseUs=
er user) throws ImportException {
-        return service.doImportMooringCommons(model, user);
+    protected ImportDataResult<MooringCommonsMooringImportConfiguration> doI=
mport(ImportDataService service, MooringCommonsMooringImportConfiguration mod=
el, EchoBaseUser user) throws ImportException {
+        return service.doImportMooringCommonsMooring(model, user);
     }
 }

--=20
To stop receiving notification emails like this one, please contact
codelutin.com SCM administrator <admin+scm@codelutin.com>.

--===============4400411965832893421==--


