branch develop updated (79abd36 -> 8b3211f)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository observe. See http://git.codelutin.com/observe.git from 79abd36 fixes #6855: Saisie générique des caractéristiques de l'équipement du bateau & migration senne Merge branch 'feature/6855' into develop new e0e0a1f refs #6855 fix migration script new 6e8c562 Add 3.16 test referntial database new b9b4bbd fix data context new d69d186 fix entities order to replicate new 0d9ee4e add fix in ReplicationService to reattach after replication missing tdr association new 1b9936a add a test new 8b3211f fixes #6611: [ObserveLL] La sauvegarde d'une marée de type palangre ne conserve pas les Tdr Merge branch 'feature/6611' into develop The 7 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 8b3211fab99111c9a491b22fca78df2d46adf7ca Merge: b9b4bbd 1b9936a Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 22:16:30 2015 +0200 fixes #6611: [ObserveLL] La sauvegarde d'une marée de type palangre ne conserve pas les Tdr Merge branch 'feature/6611' into develop commit 1b9936af1b0dd47a741f78a3b597834473932640 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 22:16:24 2015 +0200 add a test commit 0d9ee4e8dd307031c8e4cdb13727dbe3edb5d4cd Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 22:15:54 2015 +0200 add fix in ReplicationService to reattach after replication missing tdr association commit d69d186bcc24b44996b4040f785fa0f9564e264d Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 22:14:38 2015 +0200 fix entities order to replicate commit b9b4bbdb8dc43a305e62a8b0ada240ae2ecc2e3f Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 19:37:59 2015 +0200 fix data context commit 6e8c562aac15006cff0ed02787797bfec948e4fc Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 19:19:31 2015 +0200 Add 3.16 test referntial database commit e0e0a1f6a1c654499513b042aba9e3fbb39aadee Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 19:12:01 2015 +0200 refs #6855 fix migration script Summary of changes: .../java/fr/ird/observe/db/ReplicationService.java | 112 ++++++++++- .../its/replication/AbstractReplicateDataTest.java | 213 +++++++-------------- .../replication/H2LonglineReplicateDataTest.java | 177 +++++++++++++++++ .../its/replication/ReplicationDataModel.java | 148 ++++++++++++++ .../src/test/resources/db/3.16/ANO-6611.sql.gz | Bin 0 -> 172354 bytes .../src/test/resources/db/3.16/referentiel.sql.gz | Bin 0 -> 138114 bytes .../java/fr/ird/observe/entities/Entities.java | 42 ++-- .../observe/entities/longline/TripLonglines.java | 32 ++++ .../resources/db/3.16/add-gear-referential-H2.sql | 3 - .../LonglineDetailCompositionUIHandler.java | 2 +- .../LonglineGlobalCompositionUIHandler.java | 2 +- .../impl/longline/SetLonglineUIHandler.java | 2 +- 12 files changed, 555 insertions(+), 178 deletions(-) create mode 100644 observe-business/src/test/java/fr/ird/observe/its/replication/H2LonglineReplicateDataTest.java create mode 100644 observe-business/src/test/java/fr/ird/observe/its/replication/ReplicationDataModel.java create mode 100644 observe-business/src/test/resources/db/3.16/ANO-6611.sql.gz create mode 100644 observe-business/src/test/resources/db/3.16/referentiel.sql.gz create mode 100644 observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglines.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit e0e0a1f6a1c654499513b042aba9e3fbb39aadee Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 19:12:01 2015 +0200 refs #6855 fix migration script --- .../src/main/resources/db/3.16/add-gear-referential-H2.sql | 3 --- 1 file changed, 3 deletions(-) diff --git a/observe-entities/src/main/resources/db/3.16/add-gear-referential-H2.sql b/observe-entities/src/main/resources/db/3.16/add-gear-referential-H2.sql index 2b229ab..3712360 100644 --- a/observe-entities/src/main/resources/db/3.16/add-gear-referential-H2.sql +++ b/observe-entities/src/main/resources/db/3.16/add-gear-referential-H2.sql @@ -5,9 +5,6 @@ CREATE TABLE OBSERVE_COMMON.GEARCARACTERISTICTYPE(topiaid VARCHAR(255) NOT NULL, ALTER TABLE OBSERVE_COMMON.GEARCARACTERISTICTYPE ADD CONSTRAINT PK_GEARCARACTERISTICTYPE PRIMARY KEY(TOPIAID); -- -- Gear caracteristic type Data -/* - - */ -- INSERT INTO OBSERVE_COMMON.GEARCARACTERISTICTYPE(TOPIAID, TOPIAVERSION, TOPIACREATEDATE, STATUS, NEEDCOMMENT,CODE, LABEL2, LABEL1, LABEL3) VALUES ('fr.ird.observe.entities.referentiel.GearCaracteristicType#1239832686123#0.1', 0, TIMESTAMP '2015-03-28 00:00:00.00', 1, FALSE, null, STRINGDECODE('Texte'),STRINGDECODE('Text'),STRINGDECODE('Texto')); INSERT INTO OBSERVE_COMMON.GEARCARACTERISTICTYPE(TOPIAID, TOPIAVERSION, TOPIACREATEDATE, STATUS, NEEDCOMMENT,CODE, LABEL2, LABEL1, LABEL3) VALUES ('fr.ird.observe.entities.referentiel.GearCaracteristicType#1239832686123#0.2', 0, TIMESTAMP '2015-03-28 00:00:00.00', 1, FALSE, null, STRINGDECODE('Boolean'),STRINGDECODE('Boolean'),STRINGDECODE('Booleano')); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 6e8c562aac15006cff0ed02787797bfec948e4fc Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 19:19:31 2015 +0200 Add 3.16 test referntial database --- .../src/test/resources/db/3.16/referentiel.sql.gz | Bin 0 -> 138114 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/observe-business/src/test/resources/db/3.16/referentiel.sql.gz b/observe-business/src/test/resources/db/3.16/referentiel.sql.gz new file mode 100644 index 0000000..f1e5eb0 Binary files /dev/null and b/observe-business/src/test/resources/db/3.16/referentiel.sql.gz differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit b9b4bbdb8dc43a305e62a8b0ada240ae2ecc2e3f Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 19:37:59 2015 +0200 fix data context --- .../ui/content/impl/longline/LonglineDetailCompositionUIHandler.java | 2 +- .../ui/content/impl/longline/LonglineGlobalCompositionUIHandler.java | 2 +- .../fr/ird/observe/ui/content/impl/longline/SetLonglineUIHandler.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java index 0bb8f4b..ac01be8 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java @@ -271,7 +271,7 @@ public class LonglineDetailCompositionUIHandler extends ContentUIHandler<SetLong }; public LonglineDetailCompositionUIHandler(LonglineDetailCompositionUI ui) { - super(ui, DataContextType.ActivitySeine, DataContextType.SetLongline); + super(ui, DataContextType.ActivityLongline, DataContextType.SetLongline); } @Override diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineGlobalCompositionUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineGlobalCompositionUIHandler.java index 776ee0e..d02be9e 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineGlobalCompositionUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineGlobalCompositionUIHandler.java @@ -55,7 +55,7 @@ public class LonglineGlobalCompositionUIHandler extends ContentUIHandler<SetLong static private Log log = LogFactory.getLog(LonglineGlobalCompositionUIHandler.class); public LonglineGlobalCompositionUIHandler(LonglineGlobalCompositionUI ui) { - super(ui, DataContextType.ActivitySeine, DataContextType.SetLongline); + super(ui, DataContextType.ActivityLongline, DataContextType.SetLongline); } @Override diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/SetLonglineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/SetLonglineUIHandler.java index 119aeed..7d828b5 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/SetLonglineUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/SetLonglineUIHandler.java @@ -105,7 +105,7 @@ public class SetLonglineUIHandler extends ContentUIHandler<SetLongline> { protected boolean coordinateFormatChangedIsChanging; public SetLonglineUIHandler(SetLonglineUI ui) { - super(ui, DataContextType.ActivitySeine, DataContextType.SetLongline); + super(ui, DataContextType.ActivityLongline, DataContextType.SetLongline); } @Override -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit d69d186bcc24b44996b4040f785fa0f9564e264d Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 22:14:38 2015 +0200 fix entities order to replicate --- .../java/fr/ird/observe/entities/Entities.java | 42 ++++++++++------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/Entities.java b/observe-entities/src/main/java/fr/ird/observe/entities/Entities.java index f914e3b..e958c12 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/Entities.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/Entities.java @@ -205,29 +205,23 @@ public class Entities { ObserveEntityEnum.Route, ObserveEntityEnum.TripSeine, + ObserveEntityEnum.HooksComposition, + ObserveEntityEnum.BranchlinesComposition, ObserveEntityEnum.BaitsComposition, ObserveEntityEnum.FloatlinesComposition, - ObserveEntityEnum.BranchlinesComposition, - ObserveEntityEnum.HooksComposition, - + ObserveEntityEnum.SizeMeasure, + ObserveEntityEnum.WeightMeasure, ObserveEntityEnum.SetLongline, - ObserveEntityEnum.ActivityLongline, - - ObserveEntityEnum.Basket, ObserveEntityEnum.Branchline, + ObserveEntityEnum.Basket, ObserveEntityEnum.Section, - ObserveEntityEnum.CatchLongline, - //FIXME Find out why Tdr are not saved by replication ObserveEntityEnum.Tdr, ObserveEntityEnum.Encounter, - ObserveEntityEnum.SensorUsed, - ObserveEntityEnum.SizeMeasure, - + ObserveEntityEnum.ActivityLongline, ObserveEntityEnum.TdrRecord, - ObserveEntityEnum.TripLongline, - ObserveEntityEnum.WeightMeasure + ObserveEntityEnum.TripLongline }; /** @@ -264,23 +258,23 @@ public class Entities { public static final ObserveEntityEnum[] DATA_LONGLINE_ENTITIES = new ObserveEntityEnum[]{ - ObserveEntityEnum.ActivityLongline, + ObserveEntityEnum.HooksComposition, + ObserveEntityEnum.BranchlinesComposition, ObserveEntityEnum.BaitsComposition, - ObserveEntityEnum.Basket, + ObserveEntityEnum.FloatlinesComposition, + ObserveEntityEnum.SizeMeasure, + ObserveEntityEnum.WeightMeasure, + ObserveEntityEnum.SetLongline, ObserveEntityEnum.Branchline, - ObserveEntityEnum.BranchlinesComposition, + ObserveEntityEnum.Basket, + ObserveEntityEnum.Section, ObserveEntityEnum.CatchLongline, + ObserveEntityEnum.Tdr, ObserveEntityEnum.Encounter, - ObserveEntityEnum.SetLongline, - ObserveEntityEnum.FloatlinesComposition, - ObserveEntityEnum.HooksComposition, - ObserveEntityEnum.Section, ObserveEntityEnum.SensorUsed, - ObserveEntityEnum.SizeMeasure, - ObserveEntityEnum.Tdr, + ObserveEntityEnum.ActivityLongline, ObserveEntityEnum.TdrRecord, - ObserveEntityEnum.TripLongline, - ObserveEntityEnum.WeightMeasure + ObserveEntityEnum.TripLongline }; public static final ObserveEntityEnum[] ALL_ENTITIES = -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 0d9ee4e8dd307031c8e4cdb13727dbe3edb5d4cd Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 22:15:54 2015 +0200 add fix in ReplicationService to reattach after replication missing tdr association --- .../java/fr/ird/observe/db/ReplicationService.java | 112 ++++++++++++++++++++- .../observe/entities/longline/TripLonglines.java | 32 ++++++ 2 files changed, 142 insertions(+), 2 deletions(-) diff --git a/observe-business/src/main/java/fr/ird/observe/db/ReplicationService.java b/observe-business/src/main/java/fr/ird/observe/db/ReplicationService.java index 3817c8a..0468030 100644 --- a/observe-business/src/main/java/fr/ird/observe/db/ReplicationService.java +++ b/observe-business/src/main/java/fr/ird/observe/db/ReplicationService.java @@ -21,24 +21,38 @@ */ package fr.ird.observe.db; -import fr.ird.observe.entities.Entities; import fr.ird.observe.DecoratorService; import fr.ird.observe.ObserveDAOHelper; import fr.ird.observe.ObserveServiceHelper; import fr.ird.observe.db.constants.DataSourceState; +import fr.ird.observe.entities.Entities; +import fr.ird.observe.entities.Trip; +import fr.ird.observe.entities.longline.TripLongline; +import fr.ird.observe.entities.longline.TripLonglines; import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.entities.seine.TripSeineDAO; -import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.framework.TopiaSQLQuery; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.util.TopiaEntityHelper; import org.nuiton.topia.replication.TopiaReplicationService; import org.nuiton.topia.replication.model.ReplicationModel; import org.nuiton.util.StringUtil; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -50,6 +64,9 @@ import static org.nuiton.i18n.I18n.t; */ public class ReplicationService { + /** Logger. */ + private static final Log log = LogFactory.getLog(ReplicationService.class); + protected DecoratorService decoratorService; public DecoratorService getDecoratorService() { @@ -229,12 +246,25 @@ public class ReplicationService { throw new DataSourceException(e, "replicateData"); } + // To fix missing tdr associations (see https://forge.codelutin.com/issues/6611) + List<Pair<String, String>> tdrAssociation = null; + TopiaContext srcCtxt = srcService.beginTransaction("replicateData"); try { TopiaEntity e = srcCtxt.findByTopiaId(id); String label = t(DecoratorService.getEntityLabel(e.getClass())); srcService.fireNewMessage(t("observe.storage.message.replicate.data.entity", label, dstLabel)); + if (e instanceof Trip && Entities.isLonglineId(id)) { + + // Grab tdr missing associations (see https://forge.codelutin.com/issues/6611) + if (log.isInfoEnabled()) { + log.info("Should keep SetLongline - Tdr association ids for: " + id); + } + + tdrAssociation = getTdrAssociationIds(srcCtxt, (TripLongline) e); + + } } catch (TopiaException e) { throw new DataSourceException(e, "replicateData"); } finally { @@ -247,6 +277,9 @@ public class ReplicationService { // do the replicate service.doReplicate(model, dstCtxt); + // Apply back tdr missing associations (see https://forge.codelutin.com/issues/6611) + applyTdrAssociationFix(dstCtxt, tdrAssociation); + // commit the result dstService.commitTransaction(dstCtxt, "replicateData"); @@ -258,4 +291,79 @@ public class ReplicationService { } } + + private void applyTdrAssociationFix(TopiaContext dstCtxt, List<Pair<String, String>> tdrAssociation) throws TopiaException { + + String request = "\nUPDATE OBSERVE_LONGLINE.TDR SET SET = '%s' WHERE topiaid = '%s';"; + + StringBuilder builder = new StringBuilder(); + + if (CollectionUtils.isNotEmpty(tdrAssociation)) { + for (Pair<String, String> entry : tdrAssociation) { + builder.append(String.format(request, entry.getKey(), entry.getValue())); + } + } + + dstCtxt.executeSQL(builder.toString()); + + } + + private List<Pair<String, String>> getTdrAssociationIds(TopiaContext srcCtxt, TripLongline e) throws TopiaException { + + List<Pair<String, String>> result = new ArrayList<Pair<String, String>>(); + + Set<String> setIds = TripLonglines.getSetIdsWithTdr(e); + + GetTdrIdsQuery query = new GetTdrIdsQuery(); + + for (String setId : setIds) { + + List<Pair<String, String>> multipleResult = query.execute((TopiaContextImplementor) srcCtxt, setId); + + if (log.isDebugEnabled()) { + log.debug("Found TDR associations: " + multipleResult); + } + result.addAll(multipleResult); + + } + + return result; + } + + + private static class GetTdrIdsQuery extends TopiaSQLQuery<Pair<String, String>> { + + private String setId; + + public List<Pair<String, String>> execute(TopiaContextImplementor tx, String setId) throws TopiaException { + try { + + this.setId = setId; + return findMultipleResult(tx); + + } finally { + + this.setId = null; + + } + } + + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + String sql = "SELECT t.SET, t.topiaId " + + "FROM OBSERVE_LONGLINE.TDR t " + + "WHERE t.SET = ?"; + PreparedStatement ps = connection.prepareStatement(sql); + ps.setString(1, setId); + return ps; + } + + @Override + protected Pair<String, String> prepareResult(ResultSet set) throws SQLException { + Pair<String, String> result = + Pair.of(set.getString(1), set.getString(2)); + return result; + } + + } } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglines.java b/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglines.java new file mode 100644 index 0000000..6d20eaf --- /dev/null +++ b/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglines.java @@ -0,0 +1,32 @@ +package fr.ird.observe.entities.longline; + +import java.util.HashSet; +import java.util.Set; + +/** + * Created on 4/7/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.16 + */ +public class TripLonglines { + + public static Set<String> getSetIdsWithTdr(TripLongline tripLongline) { + + Set<String> setIds = new HashSet<String>(); + + for (ActivityLongline activityLongline : tripLongline.getActivityLongline()) { + + SetLongline setLongline = activityLongline.getSetLongline(); + + if (!setLongline.isTdrEmpty()) { + + String setLonglineTopiaId = setLongline.getTopiaId(); + setIds.add(setLonglineTopiaId); + + } + } + return setIds; + + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 1b9936af1b0dd47a741f78a3b597834473932640 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 22:16:24 2015 +0200 add a test --- .../its/replication/AbstractReplicateDataTest.java | 213 +++++++-------------- .../replication/H2LonglineReplicateDataTest.java | 177 +++++++++++++++++ .../its/replication/ReplicationDataModel.java | 148 ++++++++++++++ .../src/test/resources/db/3.16/ANO-6611.sql.gz | Bin 0 -> 172354 bytes 4 files changed, 392 insertions(+), 146 deletions(-) diff --git a/observe-business/src/test/java/fr/ird/observe/its/replication/AbstractReplicateDataTest.java b/observe-business/src/test/java/fr/ird/observe/its/replication/AbstractReplicateDataTest.java index 7a6d23a..435b2b3 100644 --- a/observe-business/src/test/java/fr/ird/observe/its/replication/AbstractReplicateDataTest.java +++ b/observe-business/src/test/java/fr/ird/observe/its/replication/AbstractReplicateDataTest.java @@ -21,24 +21,19 @@ */ package fr.ird.observe.its.replication; -import fr.ird.observe.entities.Entities; import fr.ird.observe.ObserveEntityEnum; import fr.ird.observe.db.DataSource; +import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.SetSeine; +import fr.ird.observe.entities.seine.FloatingObject; import fr.ird.observe.entities.seine.NonTargetCatch; +import fr.ird.observe.entities.seine.Route; +import fr.ird.observe.entities.seine.SchoolEstimate; +import fr.ird.observe.entities.seine.SetSeine; import fr.ird.observe.entities.seine.TargetCatch; +import fr.ird.observe.entities.seine.TargetLength; import fr.ird.observe.entities.seine.TargetSample; -import fr.ird.observe.entities.seine.SchoolEstimate; import fr.ird.observe.entities.seine.TripSeine; -import fr.ird.observe.entities.seine.FloatingObject; -import fr.ird.observe.entities.seine.Route; -import fr.ird.observe.entities.seine.TargetLength; -import fr.ird.observe.entities.referentiel.Country; -import fr.ird.observe.entities.referentiel.Vessel; -import fr.ird.observe.entities.referentiel.seine.WeightCategory; -import fr.ird.observe.entities.referentiel.Species; -import fr.ird.observe.entities.referentiel.Program; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; @@ -48,43 +43,10 @@ import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaEntityEnum; -import java.util.Date; - -//FIXME Add data for Longline model /** @author Tony Chemit - chemit@codelutin.com */ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { - static protected Program program; - - static protected Country country; - - static protected Route route; - - static protected TripSeine maree; - - static protected ActivitySeine activitySeine; - - static protected SetSeine setSeine; - - static protected FloatingObject dcp; - - static protected SchoolEstimate estimation; - - static protected Species species; - - static protected Species speciesFaune; - - static protected WeightCategory weightCategory; - - static protected TargetCatch discarded; - - static protected NonTargetCatch nonTargetCatch; - - static protected TargetLength taille; - - static protected TargetSample echantillon; - - static protected Vessel vessel; + static protected ReplicationDataModel replicationDataModel = new ReplicationDataModel(); @Before @Override @@ -96,26 +58,21 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { super.setUp(); - program = (Program) ctxt.findByTopiaId(program.getTopiaId()); - setSeine = update(setSeine); - activitySeine = update(activitySeine); - maree = update(maree); - route = update(route); - estimation = update(estimation); - species = update(species); - speciesFaune = update(speciesFaune); - discarded = update(discarded); - nonTargetCatch = update(nonTargetCatch); - dcp = update(dcp); - taille = update(taille); - echantillon = update(echantillon); + updateModel(); + if (getLog().isDebugEnabled()) { getLog().debug("start test (end setup) :)"); } } + protected void updateModel() throws Exception { + + replicationDataModel.update(ctxt); + } + + @Override - protected final void createModel(DataSource service) throws Exception { + protected void createModel(DataSource service) throws Exception { if (init) { if (getLog().isInfoEnabled()) { @@ -126,43 +83,7 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { TopiaContext tx = service.beginTransaction("createModel"); try { - program = service.getDAO(tx, Program.class).create(Program.PROPERTY_CODE, "9999", Program.PROPERTY_LABEL2, "program-1"); - country = service.getDAO(tx, Country.class).create(Country.PROPERTY_CODE, "9999", Country.PROPERTY_LABEL2, "country-1"); - vessel = service.getDAO(tx, Vessel.class).create(Vessel.PROPERTY_CODE, "9999", Vessel.PROPERTY_LABEL2, "vessel-1", Vessel.PROPERTY_FLAG_COUNTRY, country); - - species = service.getDAO(tx, Species.class).create(Species.PROPERTY_CODE, "9999"); - speciesFaune = service.getDAO(tx, Species.class).create(Species.PROPERTY_CODE, "9999"); - weightCategory = service.getDAO(tx, WeightCategory.class).create(WeightCategory.PROPERTY_CODE, "9999", WeightCategory.PROPERTY_SPECIES, species); - - echantillon = service.getDAO(tx, TargetSample.class).create(TargetSample.PROPERTY_NATURE, "nature"); - taille = service.getDAO(tx, TargetLength.class).create(TargetLength.PROPERTY_TARGET_SAMPLE, echantillon, TargetLength.PROPERTY_SPECIES, species, TargetLength.PROPERTY_COUNT, 1, TargetLength.PROPERTY_LENGTH, 1.0f); - maree = service.getDAO(tx, TripSeine.class).create(TripSeine.PROPERTY_START_DATE, new Date()); - route = service.getDAO(tx, Route.class).create(Route.PROPERTY_DATE, new Date()); - activitySeine = service.getDAO(tx, ActivitySeine.class).create(ActivitySeine.PROPERTY_TIME, new Date()); - setSeine = service.getDAO(tx, SetSeine.class).create(SetSeine.PROPERTY_START_TIME, new Date()); - dcp = service.getDAO(tx, FloatingObject.class).create(FloatingObject.PROPERTY_SUPPORT_VESSEL_NAME, "supportVesselName"); - discarded = service.getDAO(tx, TargetCatch.class).create( - TargetCatch.PROPERTY_SET_SEINE, setSeine, - TargetCatch.PROPERTY_WEIGHT_CATEGORY, weightCategory, - TargetCatch.PROPERTY_CATCH_WEIGHT, 1.0f); - - estimation = service.getDAO(tx, SchoolEstimate.class).create( - SchoolEstimate.PROPERTY_TOTAL_WEIGHT, 10, - SchoolEstimate.PROPERTY_SET_SEINE, setSeine, - SchoolEstimate.PROPERTY_SPECIES, species); - - nonTargetCatch = service.getDAO(tx, NonTargetCatch.class).create( - NonTargetCatch.PROPERTY_SPECIES, speciesFaune - ); - - maree.setProgram(program); - maree.addRoute(route); - route.addActivitySeine(activitySeine); - activitySeine.addFloatingObject(dcp); - activitySeine.setSetSeine(setSeine); - echantillon.addTargetLength(taille); - setSeine.addTargetSample(echantillon); - setSeine.addNonTargetCatch(nonTargetCatch); + replicationDataModel.createModel(service, tx); service.commitTransaction(tx, "createModel"); } finally { @@ -179,7 +100,7 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { } @Override - protected final TopiaEntityEnum[] getContracts() { + protected TopiaEntityEnum[] getContracts() { return Entities.DATA_ENTITIES; } @@ -210,13 +131,13 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { // detectOperations(set); // detectOperations(activity); // detectOperations(route); - detectOperations(maree); + detectOperations(replicationDataModel.tripSeine); // detectOperations(program); } @Test @Override - public final void testDoReplicate() throws Exception { + public void testDoReplicate() throws Exception { if (getLog().isDebugEnabled()) { getLog().debug("start test"); } @@ -226,23 +147,23 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { // doReplicate(ObserveEntityEnum.Set, set); // doReplicate(ObserveEntityEnum.Activity, activity); // doReplicate(ObserveEntityEnum.Route, route); - doReplicateWithComputedOrder(maree); + doReplicateWithComputedOrder(replicationDataModel.tripSeine); TopiaContext tx = dstCtxt.beginTransaction(); try { - SetSeine setSeine2 = (SetSeine) tx.findByTopiaId(setSeine.getTopiaId()); + SetSeine setSeine2 = (SetSeine) tx.findByTopiaId(replicationDataModel.setSeine.getTopiaId()); Assert.assertNotNull(setSeine2); Assert.assertFalse(setSeine2.isNonTargetCatchEmpty()); Assert.assertNotNull(setSeine2.getNonTargetCatch()); Assert.assertEquals(1, setSeine2.sizeNonTargetCatch()); NonTargetCatch nonTargetCatche1 = setSeine2.getNonTargetCatch().iterator().next(); - Assert.assertEquals(nonTargetCatch.getTopiaId(), nonTargetCatche1.getTopiaId()); + Assert.assertEquals(replicationDataModel.nonTargetCatch.getTopiaId(), nonTargetCatche1.getTopiaId()); Assert.assertNotNull(setSeine2.getTargetSample()); Assert.assertEquals(1, setSeine2.sizeTargetSample()); TargetSample ec1 = setSeine2.getTargetSample().iterator().next(); - Assert.assertEquals(echantillon.getTopiaId(), ec1.getTopiaId()); + Assert.assertEquals(replicationDataModel.targetSample.getTopiaId(), ec1.getTopiaId()); } finally { tx.closeContext(); @@ -263,17 +184,17 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { if (getLog().isDebugEnabled()) { getLog().debug("start test"); } - Assert.assertFalse(setSeine.isSchoolEstimateEmpty()); - Assert.assertNotNull(setSeine.getSchoolEstimateByTopiaId(estimation.getTopiaId())); - Assert.assertNotNull(estimation.getSetSeine()); - Assert.assertNotNull(discarded.getSetSeine()); - - detectTypes(dcp, FloatingObject.class); - detectTypes(setSeine, SetSeine.class, SchoolEstimate.class, TargetSample.class, TargetLength.class, TargetCatch.class, NonTargetCatch.class); - detectTypes(activitySeine, ActivitySeine.class, SetSeine.class, SchoolEstimate.class, FloatingObject.class, TargetSample.class, TargetLength.class, TargetCatch.class, NonTargetCatch.class); - detectTypes(route, Route.class, ActivitySeine.class, SetSeine.class, SchoolEstimate.class, FloatingObject.class, TargetSample.class, TargetLength.class, TargetCatch.class, NonTargetCatch.class); - detectTypes(maree, TripSeine.class, Route.class, ActivitySeine.class, SetSeine.class, SchoolEstimate.class, FloatingObject.class, TargetSample.class, TargetLength.class, TargetCatch.class, NonTargetCatch.class); - detectTypes(program); + Assert.assertFalse(replicationDataModel.setSeine.isSchoolEstimateEmpty()); + Assert.assertNotNull(replicationDataModel.setSeine.getSchoolEstimateByTopiaId(replicationDataModel.schoolEstimate.getTopiaId())); + Assert.assertNotNull(replicationDataModel.schoolEstimate.getSetSeine()); + Assert.assertNotNull(replicationDataModel.targetCatch.getSetSeine()); + + detectTypes(replicationDataModel.floatingObject, FloatingObject.class); + detectTypes(replicationDataModel.setSeine, SetSeine.class, SchoolEstimate.class, TargetSample.class, TargetLength.class, TargetCatch.class, NonTargetCatch.class); + detectTypes(replicationDataModel.activitySeine, ActivitySeine.class, SetSeine.class, SchoolEstimate.class, FloatingObject.class, TargetSample.class, TargetLength.class, TargetCatch.class, NonTargetCatch.class); + detectTypes(replicationDataModel.route, Route.class, ActivitySeine.class, SetSeine.class, SchoolEstimate.class, FloatingObject.class, TargetSample.class, TargetLength.class, TargetCatch.class, NonTargetCatch.class); + detectTypes(replicationDataModel.tripSeine, TripSeine.class, Route.class, ActivitySeine.class, SetSeine.class, SchoolEstimate.class, FloatingObject.class, TargetSample.class, TargetLength.class, TargetCatch.class, NonTargetCatch.class); + detectTypes(replicationDataModel.programSeine); } @Test @@ -282,27 +203,27 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { if (getLog().isDebugEnabled()) { getLog().debug("start test"); } - detectAssociations(dcp); + detectAssociations(replicationDataModel.floatingObject); - detectAssociations(setSeine, + detectAssociations(replicationDataModel.setSeine, ObserveEntityEnum.SetSeine, SetSeine.PROPERTY_SCHOOL_ESTIMATE); - detectAssociations(activitySeine, + detectAssociations(replicationDataModel.activitySeine, ObserveEntityEnum.ActivitySeine, ActivitySeine.PROPERTY_FLOATING_OBJECT, ObserveEntityEnum.SetSeine, SetSeine.PROPERTY_SCHOOL_ESTIMATE); - detectAssociations(route, + detectAssociations(replicationDataModel.route, ObserveEntityEnum.Route, Route.PROPERTY_ACTIVITY_SEINE, ObserveEntityEnum.ActivitySeine, ActivitySeine.PROPERTY_FLOATING_OBJECT, ObserveEntityEnum.SetSeine, SetSeine.PROPERTY_SCHOOL_ESTIMATE); - detectAssociations(maree, + detectAssociations(replicationDataModel.tripSeine, ObserveEntityEnum.TripSeine, TripSeine.PROPERTY_ROUTE, ObserveEntityEnum.Route, Route.PROPERTY_ACTIVITY_SEINE, ObserveEntityEnum.ActivitySeine, ActivitySeine.PROPERTY_FLOATING_OBJECT, ObserveEntityEnum.SetSeine, SetSeine.PROPERTY_SCHOOL_ESTIMATE); - detectAssociations(program); + detectAssociations(replicationDataModel.programSeine); } @Test @@ -312,29 +233,29 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { getLog().debug("start test"); } detectDirectDependencies( - dcp + replicationDataModel.floatingObject ); detectDirectDependencies( - setSeine, + replicationDataModel.setSeine, ObserveEntityEnum.SchoolEstimate, SchoolEstimate.PROPERTY_SET_SEINE); detectDirectDependencies( - activitySeine, + replicationDataModel.activitySeine, ObserveEntityEnum.SchoolEstimate, SchoolEstimate.PROPERTY_SET_SEINE, ObserveEntityEnum.ActivitySeine, ActivitySeine.PROPERTY_SET_SEINE); detectDirectDependencies( - route, + replicationDataModel.route, ObserveEntityEnum.SchoolEstimate, SchoolEstimate.PROPERTY_SET_SEINE, ObserveEntityEnum.ActivitySeine, ActivitySeine.PROPERTY_SET_SEINE); detectDirectDependencies( - maree, + replicationDataModel.tripSeine, ObserveEntityEnum.SchoolEstimate, SchoolEstimate.PROPERTY_SET_SEINE, ObserveEntityEnum.ActivitySeine, ActivitySeine.PROPERTY_SET_SEINE); - detectDirectDependencies(program); + detectDirectDependencies(replicationDataModel.programSeine); } @Test @@ -343,12 +264,12 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { if (getLog().isDebugEnabled()) { getLog().debug("start test"); } - detectShell(dcp, + detectShell(replicationDataModel.floatingObject, ObserveEntityEnum.ObjectSchoolEstimate, ObserveEntityEnum.ObjectObservedSpecies, ObserveEntityEnum.TransmittingBuoy ); - detectShell(estimation, + detectShell(replicationDataModel.schoolEstimate, ObserveEntityEnum.SetSeine, ObserveEntityEnum.TargetCatch, ObserveEntityEnum.TargetSample, @@ -357,7 +278,7 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { ObserveEntityEnum.NonTargetSample, ObserveEntityEnum.NonTargetLength ); - detectShell(setSeine, + detectShell(replicationDataModel.setSeine, ObserveEntityEnum.SchoolEstimate, ObserveEntityEnum.TargetCatch, ObserveEntityEnum.TargetSample, @@ -366,7 +287,7 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { ObserveEntityEnum.NonTargetSample, ObserveEntityEnum.NonTargetLength ); - detectShell(activitySeine, + detectShell(replicationDataModel.activitySeine, ObserveEntityEnum.SetSeine, ObserveEntityEnum.SchoolEstimate, ObserveEntityEnum.FloatingObject, @@ -380,7 +301,7 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { ObserveEntityEnum.ObjectObservedSpecies, ObserveEntityEnum.TransmittingBuoy ); - detectShell(route, + detectShell(replicationDataModel.route, ObserveEntityEnum.ActivitySeine, ObserveEntityEnum.SetSeine, ObserveEntityEnum.SchoolEstimate, @@ -395,7 +316,7 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { ObserveEntityEnum.ObjectObservedSpecies, ObserveEntityEnum.TransmittingBuoy ); - detectShell(maree, + detectShell(replicationDataModel.tripSeine, ObserveEntityEnum.Route, ObserveEntityEnum.ActivitySeine, ObserveEntityEnum.SetSeine, @@ -425,13 +346,13 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { if (getLog().isDebugEnabled()) { getLog().debug("start test"); } - detectObjectsToDettach(dcp); - detectObjectsToDettach(estimation, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); - detectObjectsToDettach(setSeine, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); - detectObjectsToDettach(activitySeine, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); - detectObjectsToDettach(route, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); - detectObjectsToDettach(maree, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); - detectObjectsToDettach(program, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); + detectObjectsToDettach(replicationDataModel.floatingObject); + detectObjectsToDettach(replicationDataModel.schoolEstimate, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); + detectObjectsToDettach(replicationDataModel.setSeine, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); + detectObjectsToDettach(replicationDataModel.activitySeine, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); + detectObjectsToDettach(replicationDataModel.route, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); + detectObjectsToDettach(replicationDataModel.tripSeine, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); + detectObjectsToDettach(replicationDataModel.programSeine, ObserveEntityEnum.SetSeine, new String[]{SetSeine.PROPERTY_SCHOOL_ESTIMATE}); } /** @@ -447,21 +368,21 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { getLog().debug("start test"); } detectDependencies( - dcp, + replicationDataModel.floatingObject, new ObserveEntityEnum[]{ObserveEntityEnum.FloatingObject} ); detectDependencies( - estimation, + replicationDataModel.schoolEstimate, new ObserveEntityEnum[]{ObserveEntityEnum.SetSeine}, new ObserveEntityEnum[]{ObserveEntityEnum.SchoolEstimate} ); detectDependencies( - setSeine, + replicationDataModel.setSeine, new ObserveEntityEnum[]{ObserveEntityEnum.SetSeine}, new ObserveEntityEnum[]{ObserveEntityEnum.SchoolEstimate} ); detectDependencies( - activitySeine, + replicationDataModel.activitySeine, new ObserveEntityEnum[]{ObserveEntityEnum.SetSeine}, new ObserveEntityEnum[]{ ObserveEntityEnum.SchoolEstimate, @@ -470,20 +391,20 @@ public abstract class AbstractReplicateDataTest extends AbstractReplicateTest { new ObserveEntityEnum[]{ObserveEntityEnum.ActivitySeine} ); detectDependencies( - route, + replicationDataModel.route, new ObserveEntityEnum[]{ObserveEntityEnum.SetSeine}, new ObserveEntityEnum[]{ObserveEntityEnum.SchoolEstimate, ObserveEntityEnum.FloatingObject}, new ObserveEntityEnum[]{ObserveEntityEnum.ActivitySeine}, new ObserveEntityEnum[]{ObserveEntityEnum.Route} ); detectDependencies( - maree, + replicationDataModel.tripSeine, new ObserveEntityEnum[]{ObserveEntityEnum.SetSeine}, new ObserveEntityEnum[]{ObserveEntityEnum.SchoolEstimate, ObserveEntityEnum.FloatingObject}, new ObserveEntityEnum[]{ObserveEntityEnum.ActivitySeine}, new ObserveEntityEnum[]{ObserveEntityEnum.Route}, new ObserveEntityEnum[]{ObserveEntityEnum.TripSeine} ); - detectDependencies(program); + detectDependencies(replicationDataModel.programSeine); } } diff --git a/observe-business/src/test/java/fr/ird/observe/its/replication/H2LonglineReplicateDataTest.java b/observe-business/src/test/java/fr/ird/observe/its/replication/H2LonglineReplicateDataTest.java new file mode 100644 index 0000000..622f12d --- /dev/null +++ b/observe-business/src/test/java/fr/ird/observe/its/replication/H2LonglineReplicateDataTest.java @@ -0,0 +1,177 @@ +package fr.ird.observe.its.replication; + +import com.google.common.collect.Maps; +import fr.ird.observe.ObserveEntityEnum; +import fr.ird.observe.db.DBTestHelper; +import fr.ird.observe.db.DataSource; +import fr.ird.observe.entities.Entities; +import fr.ird.observe.entities.longline.ActivityLongline; +import fr.ird.observe.entities.longline.SetLongline; +import fr.ird.observe.entities.longline.TripLongline; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaEntityEnum; + +import java.io.File; +import java.util.EnumMap; + +/** + * Created on 4/7/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.16 + */ +public class H2LonglineReplicateDataTest extends AbstractReplicateDataTest { + + /** Logger */ + private static final Log log = LogFactory.getLog(H2LonglineReplicateDataTest.class); + + @BeforeClass + public static void init() throws Exception { + + DBTestHelper.initDbForTest(H2LonglineReplicateDataTest.class, false, false); + + } + + @Override + protected DataSource createStorage(String name) throws Exception { + + File sourceDbDump = new File("src/test/resources/db/3.16/ANO-6611.sql.gz"); + + File dir = new File(getTestDir(getClass()), "localDB_" + name); + + DataSource dataSource = DBTestHelper.createAndOpenFromDump(dir, sourceDbDump.toURI().toURL(), false, false, true, true, true); + return dataSource; + } + + @Override + protected Log getLog() { + return log; + } + + @Override + protected void createModel(DataSource service) throws Exception { + // Do not create model, imported db is the model + } + + @Override + protected void updateModel() throws Exception { + // Do not update model, imported db is the model + } + + @Override + protected TopiaEntityEnum[] getContracts() { + return Entities.DATA_LONGLINE_ENTITIES; + } + + @Test + @Override + public void testDoReplicate() throws Exception { + if (getLog().isDebugEnabled()) { + getLog().debug("start test"); + } + + EnumMap<ObserveEntityEnum, Long> counts = Maps.newEnumMap(ObserveEntityEnum.class); + + counts.put(ObserveEntityEnum.TargetSample, 0l); + counts.put(ObserveEntityEnum.TargetLength, 0l); + counts.put(ObserveEntityEnum.NonTargetSample, 0l); + counts.put(ObserveEntityEnum.NonTargetLength, 0l); + counts.put(ObserveEntityEnum.NonTargetCatch, 0l); + counts.put(ObserveEntityEnum.SetSeine, 0l); + counts.put(ObserveEntityEnum.TargetCatch, 0l); + counts.put(ObserveEntityEnum.TransmittingBuoy, 0l); + counts.put(ObserveEntityEnum.ObjectObservedSpecies, 0l); + counts.put(ObserveEntityEnum.SchoolEstimate, 0l); + counts.put(ObserveEntityEnum.ObjectSchoolEstimate, 0l); + counts.put(ObserveEntityEnum.FloatingObject, 0l); + counts.put(ObserveEntityEnum.ActivitySeine, 0l); + counts.put(ObserveEntityEnum.Route, 0l); + counts.put(ObserveEntityEnum.TripSeine, 0l); + counts.put(ObserveEntityEnum.HooksComposition, 2l); + counts.put(ObserveEntityEnum.BranchlinesComposition, 2l); + counts.put(ObserveEntityEnum.BaitsComposition, 2l); + counts.put(ObserveEntityEnum.FloatlinesComposition, 2l); + counts.put(ObserveEntityEnum.SizeMeasure, 2l); + counts.put(ObserveEntityEnum.WeightMeasure, 2l); + counts.put(ObserveEntityEnum.SetLongline, 1l); + counts.put(ObserveEntityEnum.Branchline, 2l); + counts.put(ObserveEntityEnum.Basket, 1l); + counts.put(ObserveEntityEnum.Section, 1l); + counts.put(ObserveEntityEnum.CatchLongline, 2l); + counts.put(ObserveEntityEnum.Tdr, 2l); + counts.put(ObserveEntityEnum.Encounter, 2l); + counts.put(ObserveEntityEnum.SensorUsed, 2l); + counts.put(ObserveEntityEnum.ActivityLongline, 1l); + counts.put(ObserveEntityEnum.TdrRecord, 0l); + counts.put(ObserveEntityEnum.TripLongline, 1l); + + String tripLonglineId = "fr.ird.observe.entities.longline.TripLongline#1428427025277#0.8587988145746449"; + assertNbEntities(ctxt, counts, tripLonglineId); + + dstCtxt = (TopiaContextImplementor) createReplicateDb("doReplicateWithComputedOrder"); + + localService.getReplicationService().replicateData(localService, dbCible, tripLonglineId); + + TopiaContext tx = dstCtxt.beginTransaction(); + + try { + + assertNbEntities(tx, counts, tripLonglineId); + + } finally { + tx.closeContext(); + } + + } + + @Override + protected void assertDbEquals(TopiaEntityEnum[] contracts, TopiaContextImplementor ctxt, TopiaContextImplementor ctxt2) throws TopiaException { + // No! + } + + protected void assertNbEntities(TopiaContext tx, EnumMap<ObserveEntityEnum, Long> counts, String tripLonglineId) throws TopiaException { + + for (ObserveEntityEnum dataEntity : Entities.DATA_ENTITIES) { + + long expected = counts.get(dataEntity); + + TopiaDAO<?> dao = ((TopiaContextImplementor) tx).getDAO(dataEntity.getContract()); + long actual = dao.count(); + + + Assert.assertEquals("For entity: " + dataEntity, expected, actual); + } + + TripLongline tripLongline = (TripLongline) tx.findByTopiaId(tripLonglineId); + Assert.assertNotNull(tripLongline); + Assert.assertFalse(tripLongline.isActivityLonglineEmpty()); + Assert.assertEquals(1, tripLongline.sizeActivityLongline()); + + ActivityLongline activityLongline = tripLongline.getActivityLongline().get(0); + Assert.assertNotNull(activityLongline); + + Assert.assertFalse(activityLongline.isEncounterEmpty()); + Assert.assertEquals(2, activityLongline.sizeEncounter()); + + Assert.assertFalse(activityLongline.isSensorUsedEmpty()); + Assert.assertEquals(2, activityLongline.sizeSensorUsed()); + + SetLongline setLongline = activityLongline.getSetLongline(); + Assert.assertNotNull(setLongline); + + Assert.assertFalse(setLongline.isCatchLonglineEmpty()); + Assert.assertEquals(2, setLongline.sizeCatchLongline()); + + Assert.assertFalse(setLongline.isTdrEmpty()); + Assert.assertEquals(2, setLongline.sizeTdr()); + + } +} diff --git a/observe-business/src/test/java/fr/ird/observe/its/replication/ReplicationDataModel.java b/observe-business/src/test/java/fr/ird/observe/its/replication/ReplicationDataModel.java new file mode 100644 index 0000000..abca4c3 --- /dev/null +++ b/observe-business/src/test/java/fr/ird/observe/its/replication/ReplicationDataModel.java @@ -0,0 +1,148 @@ +package fr.ird.observe.its.replication; + +import fr.ird.observe.db.DataSource; +import fr.ird.observe.entities.longline.ActivityLongline; +import fr.ird.observe.entities.longline.SetLongline; +import fr.ird.observe.entities.longline.TripLongline; +import fr.ird.observe.entities.referentiel.Country; +import fr.ird.observe.entities.referentiel.Program; +import fr.ird.observe.entities.referentiel.Species; +import fr.ird.observe.entities.referentiel.Vessel; +import fr.ird.observe.entities.referentiel.seine.WeightCategory; +import fr.ird.observe.entities.seine.ActivitySeine; +import fr.ird.observe.entities.seine.FloatingObject; +import fr.ird.observe.entities.seine.NonTargetCatch; +import fr.ird.observe.entities.seine.Route; +import fr.ird.observe.entities.seine.SchoolEstimate; +import fr.ird.observe.entities.seine.SetSeine; +import fr.ird.observe.entities.seine.TargetCatch; +import fr.ird.observe.entities.seine.TargetLength; +import fr.ird.observe.entities.seine.TargetSample; +import fr.ird.observe.entities.seine.TripSeine; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaEntity; + +import java.util.Date; + +/** + * TODO Complete it with Longline model. + * + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.16 + */ +public class ReplicationDataModel { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ReplicationDataModel.class); + + protected Program programSeine; + + protected Program programLongline; + + protected Country country; + + protected Route route; + + protected TripSeine tripSeine; + + protected TripLongline tripLongline; + + protected ActivitySeine activitySeine; + + protected ActivityLongline activityLongline; + + protected SetSeine setSeine; + + protected SetLongline setLongline; + + protected FloatingObject floatingObject; + + protected SchoolEstimate schoolEstimate; + + protected Species species; + + protected Species speciesFaune; + + protected WeightCategory weightCategory; + + protected TargetCatch targetCatch; + + protected NonTargetCatch nonTargetCatch; + + protected TargetLength targetLength; + + protected TargetSample targetSample; + + protected Vessel vessel; + + public void createModel(DataSource service, TopiaContext tx) throws TopiaException { + + programSeine = service.getDAO(tx, Program.class).create(Program.PROPERTY_CODE, "9999", Program.PROPERTY_LABEL2, "program-1-Seine"); + programLongline = service.getDAO(tx, Program.class).create(Program.PROPERTY_CODE, "9998", Program.PROPERTY_LABEL2, "program-1-Longline"); + + country = service.getDAO(tx, Country.class).create(Country.PROPERTY_CODE, "9999", Country.PROPERTY_LABEL2, "country-1"); + vessel = service.getDAO(tx, Vessel.class).create(Vessel.PROPERTY_CODE, "9999", Vessel.PROPERTY_LABEL2, "vessel-1", Vessel.PROPERTY_FLAG_COUNTRY, country); + + species = service.getDAO(tx, Species.class).create(Species.PROPERTY_CODE, "9999"); + speciesFaune = service.getDAO(tx, Species.class).create(Species.PROPERTY_CODE, "9999"); + weightCategory = service.getDAO(tx, WeightCategory.class).create(WeightCategory.PROPERTY_CODE, "9999", WeightCategory.PROPERTY_SPECIES, species); + + targetSample = service.getDAO(tx, TargetSample.class).create(TargetSample.PROPERTY_NATURE, "nature"); + targetLength = service.getDAO(tx, TargetLength.class).create(TargetLength.PROPERTY_TARGET_SAMPLE, targetSample, TargetLength.PROPERTY_SPECIES, species, TargetLength.PROPERTY_COUNT, 1, TargetLength.PROPERTY_LENGTH, 1.0f); + tripSeine = service.getDAO(tx, TripSeine.class).create(TripSeine.PROPERTY_START_DATE, new Date()); + route = service.getDAO(tx, Route.class).create(Route.PROPERTY_DATE, new Date()); + activitySeine = service.getDAO(tx, ActivitySeine.class).create(ActivitySeine.PROPERTY_TIME, new Date()); + setSeine = service.getDAO(tx, SetSeine.class).create(SetSeine.PROPERTY_START_TIME, new Date()); + floatingObject = service.getDAO(tx, FloatingObject.class).create(FloatingObject.PROPERTY_SUPPORT_VESSEL_NAME, "supportVesselName"); + targetCatch = service.getDAO(tx, TargetCatch.class).create( + TargetCatch.PROPERTY_SET_SEINE, setSeine, + TargetCatch.PROPERTY_WEIGHT_CATEGORY, weightCategory, + TargetCatch.PROPERTY_CATCH_WEIGHT, 1.0f); + + schoolEstimate = service.getDAO(tx, SchoolEstimate.class).create( + SchoolEstimate.PROPERTY_TOTAL_WEIGHT, 10, + SchoolEstimate.PROPERTY_SET_SEINE, setSeine, + SchoolEstimate.PROPERTY_SPECIES, species); + + nonTargetCatch = service.getDAO(tx, NonTargetCatch.class).create( + NonTargetCatch.PROPERTY_SPECIES, speciesFaune + ); + + tripSeine.setProgram(programSeine); + tripSeine.addRoute(route); + route.addActivitySeine(activitySeine); + activitySeine.addFloatingObject(floatingObject); + activitySeine.setSetSeine(setSeine); + targetSample.addTargetLength(targetLength); + setSeine.addTargetSample(targetSample); + setSeine.addNonTargetCatch(nonTargetCatch); + + } + + public void update(TopiaContext ctxt) throws TopiaException { + + programSeine = (Program) ctxt.findByTopiaId(programSeine.getTopiaId()); + setSeine = update(ctxt, setSeine); + activitySeine = update(ctxt, activitySeine); + tripSeine = update(ctxt, tripSeine); + route = update(ctxt, route); + schoolEstimate = update(ctxt, schoolEstimate); + species = update(ctxt, species); + speciesFaune = update(ctxt, speciesFaune); + targetCatch = update(ctxt, targetCatch); + nonTargetCatch = update(ctxt, nonTargetCatch); + floatingObject = update(ctxt, floatingObject); + targetLength = update(ctxt, targetLength); + targetSample = update(ctxt, targetSample); + + } + + protected <E extends TopiaEntity> E update(TopiaContext ctxt, E e) throws TopiaException { + return (E) ctxt.findByTopiaId(e.getTopiaId()); + } +} diff --git a/observe-business/src/test/resources/db/3.16/ANO-6611.sql.gz b/observe-business/src/test/resources/db/3.16/ANO-6611.sql.gz new file mode 100644 index 0000000..04ae05a Binary files /dev/null and b/observe-business/src/test/resources/db/3.16/ANO-6611.sql.gz differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 8b3211fab99111c9a491b22fca78df2d46adf7ca Merge: b9b4bbd 1b9936a Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Apr 7 22:16:30 2015 +0200 fixes #6611: [ObserveLL] La sauvegarde d'une marée de type palangre ne conserve pas les Tdr Merge branch 'feature/6611' into develop .../java/fr/ird/observe/db/ReplicationService.java | 112 ++++++++++- .../its/replication/AbstractReplicateDataTest.java | 213 +++++++-------------- .../replication/H2LonglineReplicateDataTest.java | 177 +++++++++++++++++ .../its/replication/ReplicationDataModel.java | 148 ++++++++++++++ .../src/test/resources/db/3.16/ANO-6611.sql.gz | Bin 0 -> 172354 bytes .../java/fr/ird/observe/entities/Entities.java | 42 ++-- .../observe/entities/longline/TripLonglines.java | 32 ++++ 7 files changed, 552 insertions(+), 172 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm