branch feature/7133 updated (2c463e0 -> f21968e)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7133 in repository observe. See http://git.codelutin.com/observe.git discards 2c463e0 refs #7132 #7133 : utilisation des id plutot que les code pour les types activité. pour les palangre ne gardé q'un type "au port" (départ et arrivé) discards d352e5a refs #7132 : ajout des point "Rencontre" et "station océanographique" et modification du style de la carte discards 87f104b refs #7133 : ajout des point "Au port" et style de la carte adds e901afc use codelutinpom 2.0 adds da7d9ca on force a typer en float le résultat (fonctionne sous jdk 7 et 8) (refs #7074) adds d80bebc fixes #7074: Problème de lancement de calcul avec la jdk 8 Merge branch 'feature/7074' into develop adds feb42a7 utilisation de requetes spécifique pour les mises à jour plutôt que de charger la base via hibernate (refs #7135) adds e6a87c6 la dernière version de topia ajoute des binders simples pour toutes les entités (refs #7141) adds 995076f fixes #7141: Problème technique lors de la synchro de référentiel central -> local, lorsqu'une entité de type SpeciesGroup a été modifiée Merge branch 'feature/7141' into develop adds f899b96 on se base uniquement sur les topiaId des trip pour l'export des marées vers une base distante (refs #7041) adds d2c85b4 fixes #7041: La synchronisation de marées se base sur la clé métier code bateau#date de débarquement et pas sur le topiaid Merge branch 'feature/7041' into develop adds a5b99ae ajout de migration des ids défaillants (refs #7142) adds 49f7fc8 fixes #7142: Mauvais topiaid sur les entités GearUseFeaturesMeasurementSeine Merge branch 'feature/7142' into develop adds ab4e457 permettre d'utiliser des valeurs de variables non String (refs #7137) adds 8890409 ajout du rapport (refs #7137) adds 647b966 fixes #7137: [PS] Orthongel - Nouvelle requête Distribution des tailles par espèce non ciblées Merge branch 'feature/7137' into develop adds d98308a fix API adds 48a13fc ajout d'une opération pour grouper par taille (refs #7138) adds 69993bb correction du nom des operations adds 7b344a2 ajout des requetes la distribution sur les échantillons des espèces ciblés + amélioration de celle pour les espèces non ciblées (refs #7138) adds 067cfd8 fixes #7138: [PS] Orthongel - Nouvelles requêtes Distribution des tailles par espèce ciblées (type de mesure LD1 ou LF) Merge branch 'feature/7138' into develop adds f5c16c9 correction des requetes (refs #7138) adds bcd0132 ajout de la requete (refs #7134) adds 066334f fixes #7134: [PS] Orthongel - Nouvelle requête Répartition des calées par cuve Merge branch 'feature/7134' into develop adds bf54268 fix API adds da4345a correction de la requete pour fonctionner sous pg (refs #7134) adds b41614c add release test db adds 213846e Uniformisation de la présentation d'attente new a5d9544 refs #7133 : ajout des point "Au port" et style de la carte new 8cd4c0e refs #7132 : ajout des point "Rencontre" et "station océanographique" et modification du style de la carte new f21968e refs #7132 #7133 : utilisation des id plutot que les code pour les types activité. pour les palangre ne gardé q'un type "au port" (départ et arrivé) This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (2c463e0) \ N -- N -- N refs/heads/feature/7133 (f21968e) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 3 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 f21968e1433a4367465ada12fcdb489d58ec0d27 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri May 22 12:18:49 2015 +0200 refs #7132 #7133 : utilisation des id plutot que les code pour les types activité. pour les palangre ne gardé q'un type "au port" (départ et arrivé) commit 8cd4c0e96227a093639b5e2470578a589d387efa Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu May 21 17:49:27 2015 +0200 refs #7132 : ajout des point "Rencontre" et "station océanographique" et modification du style de la carte commit a5d9544ea4864e608097b469f3ea2c6bc4dfcc5b Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed May 20 17:11:40 2015 +0200 refs #7133 : ajout des point "Au port" et style de la carte Summary of changes: README.txt | 8 +- .../src/main/filters/observe-reports.properties | 124 ++++++++++++++++++++- .../src/main/java/fr/ird/observe/DataService.java | 55 +++++++++ .../fr/ird/observe/ObserveApplicationContext.java | 12 +- .../java/fr/ird/observe/report/ReportBuilder.java | 8 +- .../java/fr/ird/observe/report/model/Report.java | 12 +- .../fr/ird/observe/report/model/ReportExecute.java | 18 +-- .../ird/observe/report/model/ReportOperation.java | 2 +- .../fr/ird/observe/report/model/ReportRequest.java | 10 +- .../report/model/operations/ExecuteRequests.java | 2 +- .../report/model/operations/GroupByLength.java | 87 +++++++++++++++ .../observe/report/model/operations/SumColumn.java | 2 +- .../report/model/operations/SumIntColumn.java | 2 +- .../observe/report/model/operations/SumIntRow.java | 2 +- .../observe/report/model/operations/SumRow.java | 2 +- .../fr.ird.observe.report.model.ReportOperation | 3 +- .../ird/observe/its/report/AbstractReportIT.java | 4 +- .../its/report/accessoryCatch/Report2IT.java | 2 +- .../its/report/accessoryCatch/ReportIT.java | 2 +- .../report/accessoryCatchByGroup/Report2IT.java | 2 +- .../its/report/accessoryCatchByGroup/ReportIT.java | 2 +- .../test/resources/db/4.0-RC6/referentiel.sql.gz | Bin 0 -> 138231 bytes .../main/java/fr/ird/observe/entities/Trip.java | 4 - .../entities/longline/TripLonglineDAOImpl.java | 89 +++++++++++++++ .../entities/longline/TripLonglineImpl.java | 85 +++++++------- .../migration/AbstractDataSourceMigration.java | 4 +- ... => DataSourceMigrationForVersion_4_0_RC6.java} | 40 ++----- .../referentiel/LengthWeightParemeterHelper.java | 19 ++-- .../ird/observe/entities/seine/RouteDAOImpl.java | 47 ++++++++ .../fr/ird/observe/entities/seine/RouteImpl.java | 33 +----- .../observe/entities/seine/TripSeineDAOImpl.java | 88 +++++++++++++++ .../ird/observe/entities/seine/TripSeineImpl.java | 74 ++++++------ .../db/4.0-RC6/fix-gearUseFeatures-topiaIds-H2.sql | 5 + .../db/4.0-RC6/fix-gearUseFeatures-topiaIds-PG.sql | 5 + .../src/main/xmi/observe-common.properties | 2 +- .../src/main/xmi/observe-longline.properties | 2 +- .../src/main/xmi/observe-seine.properties | 3 +- .../src/test/java/fr/ird/observe/ScriptTest.java | 2 +- .../java/fr/ird/observe/ui/admin/AdminUIModel.java | 48 ++------ .../ird/observe/ui/admin/export/ExportModel.java | 4 +- .../ird/observe/ui/admin/report/ReportModel.java | 6 +- .../observe/ui/admin/report/ReportUIHandler.java | 12 +- .../impl/longline/ActivityLonglineUIHandler.java | 72 +++++++++++- .../open/impl/longline/TripLonglineUIHandler.java | 5 +- .../ui/content/open/impl/seine/RouteUIHandler.java | 64 ++++++----- .../open/impl/seine/TripSeineUIHandler.java | 5 +- .../fr/ird/observe/ui/util/tripMap/TripMapUI.css | 1 + .../resources/i18n/observe-swing_en_GB.properties | 2 +- .../resources/i18n/observe-swing_fr_FR.properties | 2 +- pom.xml | 4 +- 50 files changed, 785 insertions(+), 303 deletions(-) create mode 100644 observe-business/src/main/java/fr/ird/observe/report/model/operations/GroupByLength.java create mode 100644 observe-business/src/test/resources/db/4.0-RC6/referentiel.sql.gz copy observe-entities/src/main/java/fr/ird/observe/entities/migration/versions/{DataSourceMigrationForVersion_3_12.java => DataSourceMigrationForVersion_4_0_RC6.java} (51%) create mode 100644 observe-entities/src/main/resources/db/4.0-RC6/fix-gearUseFeatures-topiaIds-H2.sql create mode 100644 observe-entities/src/main/resources/db/4.0-RC6/fix-gearUseFeatures-topiaIds-PG.sql -- 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 feature/7133 in repository observe. See http://git.codelutin.com/observe.git commit a5d9544ea4864e608097b469f3ea2c6bc4dfcc5b Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed May 20 17:11:40 2015 +0200 refs #7133 : ajout des point "Au port" et style de la carte --- .../observe/entities/seine/TripSeineDAOImpl.java | 11 ++++++-- .../fr/ird/observe/tripMap/TripMapPointType.java | 1 + .../i18n/observe-entities_en_GB.properties | 1 + .../i18n/observe-entities_es_ES.properties | 1 + .../i18n/observe-entities_fr_FR.properties | 1 + .../observe/ui/util/tripMap/TripMapUIHandler.java | 3 +- observe-swing/src/main/map/style.xml | 32 ++++++++++++++++++++-- 7 files changed, 45 insertions(+), 5 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java index f2bd087..90709e6 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java @@ -53,6 +53,8 @@ import java.util.List; */ public class TripSeineDAOImpl<E extends TripSeine> extends TripSeineDAOAbstract<E> { + public static final int ACTIVITY_HARBOUR_CODE = 0; + public int findPositionByProgramId(String programId, String tripId) throws TopiaException { int result = 0; List<E> list = findAllStubByProgramId(programId, ReferenceLocale.FR); @@ -123,10 +125,13 @@ public class TripSeineDAOImpl<E extends TripSeine> extends TripSeineDAOAbstract< " a.time, " + " a.latitude," + " a.longitude," + + " v.code, " + " s.schoolType" + " FROM observe_seine.route r" + " INNER JOIN observe_seine.activity a" + " ON a.route = r.topiaId" + + " INNER JOIN observe_seine.vesselactivity v" + + " ON a.vesselactivity = v.topiaid" + " LEFT OUTER JOIN observe_seine.set s" + " ON s.topiaId = a.set" + " WHERE r.trip = ?" + @@ -158,10 +163,12 @@ public class TripSeineDAOImpl<E extends TripSeine> extends TripSeineDAOAbstract< point.setTime(calendar.getTime()); point.setLatitude(resultSet.getFloat(3)); point.setLongitude(resultSet.getFloat(4)); - if (resultSet.getString(5) == null) { + if (resultSet.getInt(5) == ACTIVITY_HARBOUR_CODE) { + point.setType(TripMapPointType.SEINE_ACTIVITY_IN_HARBOUR); + } else if (resultSet.getString(6) == null) { point.setType(TripMapPointType.SEINE_ACTIVITY); } else { - SchoolType schoolType = SchoolType.values()[resultSet.getInt(5)]; + SchoolType schoolType = SchoolType.values()[resultSet.getInt(6)]; switch (schoolType) { case libre: point.setType(TripMapPointType.SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE); diff --git a/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java b/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java index 1024d95..4380ce4 100644 --- a/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java +++ b/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java @@ -33,6 +33,7 @@ public enum TripMapPointType { SEINE_DEPARTURE_HARBOUR(n("observe.map.seine.harbour.departure")), SEINE_LANDINGE_HARBOUR(n("observe.map.seine.harbour.landing")), SEINE_ACTIVITY(n("observe.map.seine.activity")), + SEINE_ACTIVITY_IN_HARBOUR(n("observe.map.seine.activity.inHarbour")), SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE(n("observe.map.seine.activity.schollType.free")), SEINE_ACTIVITY_WITH_OBJECT_SCHOOL_TYPE(n("observe.map.seine.activity.schollType.object")), diff --git a/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties b/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties index 9f50422..b33150c 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties @@ -28,6 +28,7 @@ observe.map.longLine.activity.setting.start= observe.map.longLine.seine.harbour.departure= observe.map.longLine.seine.harbour.landing= observe.map.seine.activity= +observe.map.seine.activity.inHarbour= observe.map.seine.activity.schollType.free= observe.map.seine.activity.schollType.object= observe.map.seine.harbour.departure= diff --git a/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties b/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties index a0f0749..b7b3dde 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties @@ -28,6 +28,7 @@ observe.map.longLine.activity.setting.start= observe.map.longLine.seine.harbour.departure= observe.map.longLine.seine.harbour.landing= observe.map.seine.activity= +observe.map.seine.activity.inHarbour= observe.map.seine.activity.schollType.free= observe.map.seine.activity.schollType.object= observe.map.seine.harbour.departure= diff --git a/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties b/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties index 60be1c5..858bcda 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties @@ -28,6 +28,7 @@ observe.map.longLine.activity.setting.start=Début de virage observe.map.longLine.seine.harbour.departure=Port de départ observe.map.longLine.seine.harbour.landing=Port d'arrivée observe.map.seine.activity=point d'activité +observe.map.seine.activity.inHarbour=Au port observe.map.seine.activity.schollType.free=Banc libre observe.map.seine.activity.schollType.object=Banc objet observe.map.seine.harbour.departure=Port de départ diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java index c3f1512..40994fb 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java @@ -107,6 +107,7 @@ public class TripMapUIHandler { public static final double ZOOM_STEP_RATIO = 0.1; protected static final Set<TripMapPointType> TRIP_MAP_POINT_TYPES_IN_LEGEND = ImmutableSet.of( + TripMapPointType.SEINE_ACTIVITY_IN_HARBOUR, TripMapPointType.SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE, TripMapPointType.SEINE_ACTIVITY_WITH_OBJECT_SCHOOL_TYPE, TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_START, @@ -246,7 +247,7 @@ public class TripMapUIHandler { mapContent.addLayer(layer); } - SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); + SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM"); GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); diff --git a/observe-swing/src/main/map/style.xml b/observe-swing/src/main/map/style.xml index 6218ae8..7305fd4 100644 --- a/observe-swing/src/main/map/style.xml +++ b/observe-swing/src/main/map/style.xml @@ -42,7 +42,7 @@ </ogc:Filter> <LineSymbolizer> <Stroke> - <CssParameter name="stroke">#000000</CssParameter> + <CssParameter name="stroke">#ff4444</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </LineSymbolizer> @@ -77,7 +77,7 @@ </ogc:Filter> <LineSymbolizer> <Stroke> - <CssParameter name="stroke">#000000</CssParameter> + <CssParameter name="stroke">#ff4444</CssParameter> <CssParameter name="stroke-width">2</CssParameter> <CssParameter name="stroke-dasharray">6 4</CssParameter> </Stroke> @@ -93,6 +93,34 @@ <IsDefault>true</IsDefault> <FeatureTypeStyle> <Rule> + <Name>Point seine activity in harbour</Name> + <ogc:Filter> + <ogc:PropertyIsEqualTo> + <ogc:PropertyName>pointType</ogc:PropertyName> + <ogc:Literal>SEINE_ACTIVITY_IN_HARBOUR</ogc:Literal> + </ogc:PropertyIsEqualTo> + </ogc:Filter> + <PointSymbolizer> + <Graphic> + <Mark> + <WellKnownName>Circle</WellKnownName> + <Fill> + <CssParameter name="fill">#7800f6</CssParameter> + </Fill> + <Stroke> + <CssParameter name="stroke">#000000</CssParameter> + <CssParameter name="stroke-width">1</CssParameter> + </Stroke> + </Mark> + <Size>16</Size> + </Graphic> + </PointSymbolizer> + </Rule> + </FeatureTypeStyle> + + + <FeatureTypeStyle> + <Rule> <Name>Point seine activity with free school type</Name> <ogc:Filter> <ogc:PropertyIsEqualTo> -- 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 feature/7133 in repository observe. See http://git.codelutin.com/observe.git commit 8cd4c0e96227a093639b5e2470578a589d387efa Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu May 21 17:49:27 2015 +0200 refs #7132 : ajout des point "Rencontre" et "station océanographique" et modification du style de la carte --- .../entities/longline/TripLonglineDAOImpl.java | 53 ++- .../observe/entities/seine/TripSeineDAOImpl.java | 13 +- .../fr/ird/observe/tripMap/TripMapPointType.java | 8 +- .../i18n/observe-entities_en_GB.properties | 2 + .../i18n/observe-entities_es_ES.properties | 2 + .../i18n/observe-entities_fr_FR.properties | 2 + .../ui/util/tripMap/TripMapContentBuilder.java | 435 +++++++++++++++++++++ .../observe/ui/util/tripMap/TripMapUIHandler.java | 351 ++--------------- observe-swing/src/main/map/style.xml | 153 +++++++- .../resources/i18n/observe-swing_en_GB.properties | 2 + .../resources/i18n/observe-swing_es_ES.properties | 2 + .../resources/i18n/observe-swing_fr_FR.properties | 2 + 12 files changed, 665 insertions(+), 360 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java index 71cc2c8..5677d27 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java @@ -46,6 +46,9 @@ import java.util.List; public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAOAbstract<E> { + public static final String ACTIVITY_INTERACTION_CODE = "INT"; + public static final String ACTIVITY_STATION_CODE = "SAMP"; + public int findPositionByProgramId(String programId, String tripId) throws TopiaException { int result = 0; List<E> list = findAllStubByProgramId(programId, ReferenceLocale.FR); @@ -109,7 +112,7 @@ public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAO landingPoint.setTime(tripLongline.getEndDate()); landingPoint.setLatitude(landingHarbour.getLatitude()); landingPoint.setLongitude(landingHarbour.getLongitude()); - landingPoint.setType(TripMapPointType.LONGLINE_LANDINGE_HARBOUR); + landingPoint.setType(TripMapPointType.LONGLINE_LANDING_HARBOUR); tripMapPoints.add(landingPoint); } @@ -122,6 +125,7 @@ public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAO " a.timestamp, " + " a.latitude," + " a.longitude," + + " v.code," + " s.settingStartTimestamp," + " s.settingStartLatitude," + " s.settingStartLongitude," + @@ -135,6 +139,8 @@ public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAO " s.haulingEndLatitude," + " s.haulingEndLongitude" + " FROM observe_longLine.activity a" + + " LEFT OUTER JOIN observe_longLine.vesselActivity v" + + " ON v.topiaid = a.vesselActivity" + " LEFT OUTER JOIN observe_longLine.set s" + " ON s.topiaId = a.set" + " WHERE a.trip = ?" + @@ -163,45 +169,56 @@ public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAO activity.setTime(resultSet.getDate(1)); activity.setLatitude(resultSet.getFloat(2)); activity.setLongitude(resultSet.getFloat(3)); - activity.setType(TripMapPointType.LONGLINE_ACTIVITY); + + String vesselActivityCode = resultSet.getString(4); + if (vesselActivityCode == null) { + activity.setType(TripMapPointType.LONGLINE_ACTIVITY); + } else if (vesselActivityCode.equals(ACTIVITY_INTERACTION_CODE)) { + activity.setType(TripMapPointType.LONGLINE_ACTIVITY_WITH_INTERACTION); + } else if (vesselActivityCode.equals(ACTIVITY_STATION_CODE)) { + activity.setType(TripMapPointType.LONGLINE_ACTIVITY_WITH_STATION); + } else { + activity.setType(TripMapPointType.LONGLINE_ACTIVITY); + } + result.add(activity); // settingStart - if (resultSet.getString(4) != null) { + if (resultSet.getString(5) != null) { TripMapPoint settingStart = new TripMapPoint(); - settingStart.setTime(resultSet.getDate(4)); - settingStart.setLatitude(resultSet.getFloat(5)); - settingStart.setLongitude(resultSet.getFloat(6)); + settingStart.setTime(resultSet.getDate(5)); + settingStart.setLatitude(resultSet.getFloat(6)); + settingStart.setLongitude(resultSet.getFloat(7)); settingStart.setType(TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_START); result.add(settingStart); } // settingEnd - if (resultSet.getString(7) != null) { + if (resultSet.getString(8) != null) { TripMapPoint settingEnd = new TripMapPoint(); - settingEnd.setTime(resultSet.getDate(7)); - settingEnd.setLatitude(resultSet.getFloat(8)); - settingEnd.setLongitude(resultSet.getFloat(9)); + settingEnd.setTime(resultSet.getDate(8)); + settingEnd.setLatitude(resultSet.getFloat(9)); + settingEnd.setLongitude(resultSet.getFloat(10)); settingEnd.setType(TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_END); result.add(settingEnd); } // haulingStart - if (resultSet.getString(10) != null) { + if (resultSet.getString(11) != null) { TripMapPoint haulingStart = new TripMapPoint(); - haulingStart.setTime(resultSet.getDate(10)); - haulingStart.setLatitude(resultSet.getFloat(11)); - haulingStart.setLongitude(resultSet.getFloat(12)); + haulingStart.setTime(resultSet.getDate(11)); + haulingStart.setLatitude(resultSet.getFloat(12)); + haulingStart.setLongitude(resultSet.getFloat(13)); haulingStart.setType(TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_START); result.add(haulingStart); } // haulingEnd - if (resultSet.getString(13) != null) { + if (resultSet.getString(14) != null) { TripMapPoint haulingEnd = new TripMapPoint(); - haulingEnd.setTime(resultSet.getDate(13)); - haulingEnd.setLatitude(resultSet.getFloat(14)); - haulingEnd.setLongitude(resultSet.getFloat(15)); + haulingEnd.setTime(resultSet.getDate(14)); + haulingEnd.setLatitude(resultSet.getFloat(15)); + haulingEnd.setLongitude(resultSet.getFloat(16)); haulingEnd.setType(TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_END); result.add(haulingEnd); } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java index 90709e6..368a267 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java @@ -40,8 +40,6 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Time; -import java.util.Calendar; import java.util.Date; import java.util.List; @@ -111,7 +109,7 @@ public class TripSeineDAOImpl<E extends TripSeine> extends TripSeineDAOAbstract< landingPoint.setTime(tripSeine.getEndDate()); landingPoint.setLatitude(landingHarbour.getLatitude()); landingPoint.setLongitude(landingHarbour.getLongitude()); - landingPoint.setType(TripMapPointType.SEINE_LANDINGE_HARBOUR); + landingPoint.setType(TripMapPointType.SEINE_LANDING_HARBOUR); tripMapPoints.add(landingPoint); } @@ -154,13 +152,8 @@ public class TripSeineDAOImpl<E extends TripSeine> extends TripSeineDAOAbstract< protected TripMapPoint prepareResult(ResultSet resultSet) throws SQLException { TripMapPoint point = new TripMapPoint(); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(resultSet.getDate(1)); - Time time = resultSet.getTime(2); - calendar.set(Calendar.HOUR_OF_DAY, time.getHours()); - calendar.set(Calendar.MINUTE, time.getMinutes()); - calendar.set(Calendar.SECOND, time.getSeconds()); - point.setTime(calendar.getTime()); + Date time = DateUtil.getDateAndTime(resultSet.getDate(1), resultSet.getTime(2), true, false); + point.setTime(time); point.setLatitude(resultSet.getFloat(3)); point.setLongitude(resultSet.getFloat(4)); if (resultSet.getInt(5) == ACTIVITY_HARBOUR_CODE) { diff --git a/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java b/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java index 4380ce4..04fdaa2 100644 --- a/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java +++ b/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java @@ -31,19 +31,21 @@ import static org.nuiton.i18n.I18n.t; public enum TripMapPointType { SEINE_DEPARTURE_HARBOUR(n("observe.map.seine.harbour.departure")), - SEINE_LANDINGE_HARBOUR(n("observe.map.seine.harbour.landing")), + SEINE_LANDING_HARBOUR(n("observe.map.seine.harbour.landing")), SEINE_ACTIVITY(n("observe.map.seine.activity")), SEINE_ACTIVITY_IN_HARBOUR(n("observe.map.seine.activity.inHarbour")), SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE(n("observe.map.seine.activity.schollType.free")), SEINE_ACTIVITY_WITH_OBJECT_SCHOOL_TYPE(n("observe.map.seine.activity.schollType.object")), LONGLINE_DEPARTURE_HARBOUR(n("observe.map.longLine.seine.harbour.departure")), - LONGLINE_LANDINGE_HARBOUR(n("observe.map.longLine.seine.harbour.landing")), + LONGLINE_LANDING_HARBOUR(n("observe.map.longLine.seine.harbour.landing")), LONGLINE_ACTIVITY(n("observe.map.longLine.activity")), LONGLINE_ACTIVITY_WITH_SETTING_START(n("observe.map.longLine.activity.setting.start")), LONGLINE_ACTIVITY_WITH_SETTING_END(n("observe.map.longLine.activity.setting.end")), LONGLINE_ACTIVITY_WITH_HAULING_START(n("observe.map.longLine.activity.hauling.start")), - LONGLINE_ACTIVITY_WITH_HAULING_END(n("observe.map.longLine.activity.hauling.end")); + LONGLINE_ACTIVITY_WITH_HAULING_END(n("observe.map.longLine.activity.hauling.end")), + LONGLINE_ACTIVITY_WITH_INTERACTION(n("observe.map.longLine.activity.interaction")), + LONGLINE_ACTIVITY_WITH_STATION(n("observe.map.longLine.activity.station")); String label; diff --git a/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties b/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties index b33150c..a4a8c32 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties @@ -23,8 +23,10 @@ observe.common.schoolType.undefined= observe.map.longLine.activity= observe.map.longLine.activity.hauling.end= observe.map.longLine.activity.hauling.start= +observe.map.longLine.activity.interaction= observe.map.longLine.activity.setting.end= observe.map.longLine.activity.setting.start= +observe.map.longLine.activity.station= observe.map.longLine.seine.harbour.departure= observe.map.longLine.seine.harbour.landing= observe.map.seine.activity= diff --git a/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties b/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties index b7b3dde..ebb20b1 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties @@ -23,8 +23,10 @@ observe.common.schoolType.undefined=Banco indeterminado observe.map.longLine.activity= observe.map.longLine.activity.hauling.end= observe.map.longLine.activity.hauling.start= +observe.map.longLine.activity.interaction= observe.map.longLine.activity.setting.end= observe.map.longLine.activity.setting.start= +observe.map.longLine.activity.station= observe.map.longLine.seine.harbour.departure= observe.map.longLine.seine.harbour.landing= observe.map.seine.activity= diff --git a/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties b/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties index 858bcda..74354e3 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties @@ -23,8 +23,10 @@ observe.common.schoolType.undefined=Banc indéterminé observe.map.longLine.activity=point d'activité observe.map.longLine.activity.hauling.end=Fin de filage observe.map.longLine.activity.hauling.start=Début de filage +observe.map.longLine.activity.interaction=Rencontre observe.map.longLine.activity.setting.end=Fin de virage observe.map.longLine.activity.setting.start=Début de virage +observe.map.longLine.activity.station=Station océanographique observe.map.longLine.seine.harbour.departure=Port de départ observe.map.longLine.seine.harbour.landing=Port d'arrivée observe.map.seine.activity=point d'activité diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapContentBuilder.java b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapContentBuilder.java new file mode 100644 index 0000000..ad2df49 --- /dev/null +++ b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapContentBuilder.java @@ -0,0 +1,435 @@ +package fr.ird.observe.ui.util.tripMap; + +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.GeometryFactory; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.MultiPoint; +import com.vividsolutions.jts.geom.Polygon; +import fr.ird.observe.ObserveTechnicalException; +import fr.ird.observe.tripMap.TripMapPoint; +import fr.ird.observe.tripMap.TripMapPointType; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.geotools.data.FileDataStore; +import org.geotools.data.FileDataStoreFinder; +import org.geotools.data.simple.SimpleFeatureSource; +import org.geotools.factory.CommonFactoryFinder; +import org.geotools.feature.DefaultFeatureCollection; +import org.geotools.feature.simple.SimpleFeatureBuilder; +import org.geotools.feature.simple.SimpleFeatureTypeBuilder; +import org.geotools.geometry.jts.JTSFactoryFinder; +import org.geotools.map.FeatureLayer; +import org.geotools.map.Layer; +import org.geotools.map.MapContent; +import org.geotools.referencing.CRS; +import org.geotools.styling.NamedLayer; +import org.geotools.styling.SLD; +import org.geotools.styling.SLDParser; +import org.geotools.styling.Style; +import org.geotools.styling.StyleFactory; +import org.geotools.styling.StyledLayer; +import org.geotools.styling.StyledLayerDescriptor; +import org.geotools.styling.UserLayer; +import org.opengis.feature.simple.SimpleFeature; +import org.opengis.feature.simple.SimpleFeatureType; +import org.opengis.referencing.FactoryException; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class TripMapContentBuilder { + + public static final String TRIP_LINES_LAYER_NAME = "Trip lines"; + public static final String TRIP_LONGLINE_FISHING_ZONE_LAYER_NAME = "Trip longline zone"; + public static final String TRIP_LONGLINE_LINE_LAYER_NAME = "Trip longline line"; + public static final String TRIP_POINTS_LAYER_NAME = "Trip points"; + + protected static final Set<TripMapPointType> TRIP_MAP_POINT_TYPES_IN_LEGEND = ImmutableSet.of( + TripMapPointType.SEINE_ACTIVITY_IN_HARBOUR, + TripMapPointType.SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE, + TripMapPointType.SEINE_ACTIVITY_WITH_OBJECT_SCHOOL_TYPE, + TripMapPointType.LONGLINE_DEPARTURE_HARBOUR, + TripMapPointType.LONGLINE_LANDING_HARBOUR, + TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_START, + TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_END, + TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_START, + TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_END, + TripMapPointType.LONGLINE_ACTIVITY_WITH_STATION, + TripMapPointType.LONGLINE_ACTIVITY_WITH_INTERACTION); + + protected StyledLayerDescriptor styledLayerDescriptor; + + protected MapContent mapContent; + protected List<ObserveMapPaneLegendItem> legendItems; + + public TripMapContentBuilder() { + mapContent = new MapContent(); + legendItems = Lists.newArrayList(); + } + + public MapContent getMapContent() { + return mapContent; + } + + public List<ObserveMapPaneLegendItem> getLegendItems() { + return legendItems; + } + + public void setStyledLayerDescriptor(File styleFile) throws FileNotFoundException { + + StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory(null); + + SLDParser stylereader = new SLDParser(styleFactory, styleFile); + + styledLayerDescriptor = stylereader.parseSLD(); + } + + public void addLayer(File layerFile) throws IOException { + FileDataStore store = FileDataStoreFinder.getDataStore(layerFile); + SimpleFeatureSource featureSource = store.getFeatureSource(); + Style style = SLD.createSimpleStyle(featureSource.getSchema()); + style = findStyle(styledLayerDescriptor, store.getNames().get(0).getLocalPart(), null, style); + Layer layer = new FeatureLayer(featureSource, style); + mapContent.addLayer(layer); + } + + public void addTripLine(List<TripMapPoint> tripMapPoints) throws FactoryException { + SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM"); + + GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); + + SimpleFeatureTypeBuilder lineFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); + lineFeatureTypeBuilder.setName("lineBuilder"); + lineFeatureTypeBuilder.setCRS(CRS.decode("EPSG:4326", true)); + lineFeatureTypeBuilder.add("line", LineString.class); + lineFeatureTypeBuilder.add("label", String.class); + lineFeatureTypeBuilder.add("type", String.class); + + SimpleFeatureType lineFeatureType = lineFeatureTypeBuilder.buildFeatureType(); + SimpleFeatureBuilder lineBuilder = new SimpleFeatureBuilder(lineFeatureType); + + DefaultFeatureCollection linesFeatures = new DefaultFeatureCollection(); + + List<Coordinate> coordinatesByDay = null; + + TripMapPoint previousPoint = null; + + for (TripMapPoint point : tripMapPoints) { + if (previousPoint == null) { + coordinatesByDay = Lists.newLinkedList(); + } else if (!DateUtils.isSameDay(previousPoint.getTime(), point.getTime())) { + + if (coordinatesByDay.size() > 1) { + LineString line = geometryFactory.createLineString(coordinatesByDay.toArray(new Coordinate[0])); + lineBuilder.add(line); + lineBuilder.add(dateFormat.format(previousPoint.getTime())); + lineBuilder.add("tripDay"); + SimpleFeature feature = lineBuilder.buildFeature(null); + + linesFeatures.add(feature); + } + + + Coordinate[] coordinates = { + new Coordinate(previousPoint.getLongitude(), previousPoint.getLatitude()), + new Coordinate(point.getLongitude(), point.getLatitude()), + }; + LineString lineBetweenTwoDays = geometryFactory.createLineString(coordinates); + lineBuilder.add(lineBetweenTwoDays); + lineBuilder.add(DateFormat.getDateInstance().format(previousPoint.getTime())); + lineBuilder.add("tripBetweenTwoDays"); + linesFeatures.add(lineBuilder.buildFeature(null)); + + coordinatesByDay = Lists.newLinkedList(); + } + + Coordinate coordinate = new Coordinate(point.getLongitude(), point.getLatitude()); + coordinatesByDay.add(coordinate); + + previousPoint = point; + } + + if (coordinatesByDay.size() > 1) { + LineString line = geometryFactory.createLineString(coordinatesByDay.toArray(new Coordinate[0])); + lineBuilder.add(line); + lineBuilder.add(dateFormat.format(previousPoint.getTime())); + lineBuilder.add("tripDay"); + linesFeatures.add(lineBuilder.buildFeature(null)); + } + + Style styleLines = findStyle(styledLayerDescriptor, TRIP_LINES_LAYER_NAME, null); + Layer layerLines = new FeatureLayer(linesFeatures, styleLines); + mapContent.addLayer(layerLines); + + + // add line in legend + LineString line = geometryFactory.createLineString(ObserveMapPaneLegendItem.lineCoordinates()); + lineBuilder.add(line); + lineBuilder.add(""); + lineBuilder.add("tripDay"); + + ObserveMapPaneLegendItem legendTripDay = new ObserveMapPaneLegendItem( + lineBuilder.buildFeature(null), + styleLines, + t("observe.map.legend.tripDay")); + legendItems.add(legendTripDay); + + lineBuilder.add(line); + lineBuilder.add(""); + lineBuilder.add("tripBetweenTwoDays"); + ObserveMapPaneLegendItem legendTripBetweenTwoDays = new ObserveMapPaneLegendItem( + lineBuilder.buildFeature(null), + styleLines, + t("observe.map.legend.tripBetweenTwoDays")); + legendItems.add(legendTripBetweenTwoDays); + + } + + public void addLonglineFishingZone(List<TripMapPoint> tripMapPoints) throws FactoryException { + GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); + + SimpleFeatureTypeBuilder polygonFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); + polygonFeatureTypeBuilder.setName("longlineFishingZoneBuilder"); + polygonFeatureTypeBuilder.setCRS(CRS.decode("EPSG:4326", true)); + polygonFeatureTypeBuilder.add("zone", Polygon.class); + polygonFeatureTypeBuilder.add("type", String.class); + + SimpleFeatureType polygonFeatureType = polygonFeatureTypeBuilder.buildFeatureType(); + SimpleFeatureBuilder polygonBuilder = new SimpleFeatureBuilder(polygonFeatureType); + + DefaultFeatureCollection polygonsFeatures = new DefaultFeatureCollection(); + + for (int indexPoint = 3; indexPoint < tripMapPoints.size(); indexPoint++) { + if (tripMapPoints.get(indexPoint).getType().equals(TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_END) + && tripMapPoints.get(indexPoint - 1).getType().equals(TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_START) + && tripMapPoints.get(indexPoint - 2).getType().equals(TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_END) + && tripMapPoints.get(indexPoint - 3).getType().equals(TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_START)) { + + Coordinate[] coordinates = { + new Coordinate(tripMapPoints.get(indexPoint - 3).getLongitude(), tripMapPoints.get(indexPoint - 3).getLatitude()), + new Coordinate(tripMapPoints.get(indexPoint - 2).getLongitude(), tripMapPoints.get(indexPoint - 2).getLatitude()), + new Coordinate(tripMapPoints.get(indexPoint - 1).getLongitude(), tripMapPoints.get(indexPoint - 1).getLatitude()), + new Coordinate(tripMapPoints.get(indexPoint).getLongitude(), tripMapPoints.get(indexPoint).getLatitude()), + new Coordinate(tripMapPoints.get(indexPoint - 3).getLongitude(), tripMapPoints.get(indexPoint - 3).getLatitude()) + }; + + + Polygon polygon = geometryFactory.createPolygon(coordinates); + polygonBuilder.add(polygon); + polygonBuilder.add("longlineFishingZone"); + SimpleFeature feature = polygonBuilder.buildFeature(null); + polygonsFeatures.add(feature); + + } + } + + Style styleLines = findStyle(styledLayerDescriptor, TRIP_LONGLINE_FISHING_ZONE_LAYER_NAME, null); + Layer layerLines = new FeatureLayer(polygonsFeatures, styleLines); + mapContent.addLayer(layerLines); + } + + public void addLonglineLine(List<TripMapPoint> tripMapPoints) throws FactoryException { + GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); + + SimpleFeatureTypeBuilder lineFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); + lineFeatureTypeBuilder.setName("longlineSettingBuilder"); + lineFeatureTypeBuilder.setCRS(CRS.decode("EPSG:4326", true)); + lineFeatureTypeBuilder.add("line", LineString.class); + lineFeatureTypeBuilder.add("type", String.class); + + SimpleFeatureType lineFeatureType = lineFeatureTypeBuilder.buildFeatureType(); + SimpleFeatureBuilder lineBuilder = new SimpleFeatureBuilder(lineFeatureType); + + DefaultFeatureCollection linesFeatures = new DefaultFeatureCollection(); + + for (int indexPoint = 1; indexPoint < tripMapPoints.size(); indexPoint++) { + if (tripMapPoints.get(indexPoint).getType().equals(TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_END) + && tripMapPoints.get(indexPoint - 1).getType().equals(TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_START) + || tripMapPoints.get(indexPoint).getType().equals(TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_END) + && tripMapPoints.get(indexPoint - 1).getType().equals(TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_START)) { + + Coordinate[] coordinates = { + new Coordinate(tripMapPoints.get(indexPoint - 1).getLongitude(), tripMapPoints.get(indexPoint - 1).getLatitude()), + new Coordinate(tripMapPoints.get(indexPoint).getLongitude(), tripMapPoints.get(indexPoint).getLatitude()), + }; + + boolean setting = tripMapPoints.get(indexPoint).getType().equals(TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_END); + LineString lineString = geometryFactory.createLineString(coordinates); + lineBuilder.add(lineString); + lineBuilder.add(setting ? "setting" : "hauling"); + SimpleFeature feature = lineBuilder.buildFeature(null); + linesFeatures.add(feature); + + } + } + + Style styleLines = findStyle(styledLayerDescriptor, TRIP_LONGLINE_LINE_LAYER_NAME, null); + Layer layerLines = new FeatureLayer(linesFeatures, styleLines); + mapContent.addLayer(layerLines); + + // add line in legend + LineString line = geometryFactory.createLineString(ObserveMapPaneLegendItem.lineCoordinates()); + lineBuilder.add(line); + lineBuilder.add("setting"); + + ObserveMapPaneLegendItem legendTripDay = new ObserveMapPaneLegendItem( + lineBuilder.buildFeature(null), + styleLines, + t("observe.map.legend.setting")); + legendItems.add(legendTripDay); + + line = geometryFactory.createLineString(ObserveMapPaneLegendItem.lineCoordinates()); + lineBuilder.add(line); + lineBuilder.add("hauling"); + + legendTripDay = new ObserveMapPaneLegendItem( + lineBuilder.buildFeature(null), + styleLines, + t("observe.map.legend.hauling")); + legendItems.add(legendTripDay); + + + } + + + public void addPoints(List<TripMapPoint> tripMapPoints) throws FactoryException { + + GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); + + SimpleFeatureTypeBuilder pointFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); + pointFeatureTypeBuilder.setName("point Builder"); + pointFeatureTypeBuilder.setCRS(CRS.decode("EPSG:4326", true)); + pointFeatureTypeBuilder.add("points", MultiPoint.class); + pointFeatureTypeBuilder.add("pointType", String.class); + + SimpleFeatureType pointFeatureType = pointFeatureTypeBuilder.buildFeatureType(); + SimpleFeatureBuilder pointBuilder = new SimpleFeatureBuilder(pointFeatureType); + + DefaultFeatureCollection pointsFeatures = new DefaultFeatureCollection(); + + Style stylePoints = findStyle(styledLayerDescriptor, TRIP_POINTS_LAYER_NAME, null); + + + for (final TripMapPointType type : TripMapPointType.values()) { + + Iterable<Coordinate> coordinates = Iterables.transform( + Iterables.filter(tripMapPoints, new Predicate<TripMapPoint>() { + @Override + public boolean apply(TripMapPoint input) { + return type.equals(input.getType()); + } + }), + new Function<TripMapPoint, Coordinate>() { + @Override + public Coordinate apply(TripMapPoint input) { + return new Coordinate(input.getLongitude(), input.getLatitude()); + } + }); + + ArrayList<Coordinate> coordinatesArray = Lists.newArrayList(coordinates); + if (! coordinatesArray.isEmpty()) { + MultiPoint points = geometryFactory.createMultiPoint(coordinatesArray.toArray(new Coordinate[0])); + pointBuilder.add(points); + pointBuilder.add(type.name()); + pointsFeatures.add(pointBuilder.buildFeature(null)); + + + // add point in legend + if (TRIP_MAP_POINT_TYPES_IN_LEGEND.contains(type)) { + points = geometryFactory.createMultiPoint(ObserveMapPaneLegendItem.pointCoordinates()); + pointBuilder.add(points); + pointBuilder.add(type.name()); + + ObserveMapPaneLegendItem legendPoint = new ObserveMapPaneLegendItem( + pointBuilder.buildFeature(null), + stylePoints, + type.getLabel()); + legendItems.add(legendPoint); + } + + } + } + + Layer pointsLayer = new FeatureLayer(pointsFeatures, stylePoints); + mapContent.addLayer(pointsLayer); + + } + + + protected Style findStyle(StyledLayerDescriptor styledLayerDescriptor, final String layerName, String styleName, Style defaultStyle) { + + Optional<StyledLayer> styledLayerOptional = Iterables.tryFind(styledLayerDescriptor.layers(), new Predicate<StyledLayer>() { + @Override + public boolean apply(StyledLayer input) { + return input.getName().equals(layerName); + } + }); + + Style style = defaultStyle; + + if (styledLayerOptional.isPresent()) { + + StyledLayer styledLayer = styledLayerOptional.get(); + + Style[] styles = new Style[0]; + + if (styledLayer instanceof UserLayer) { + + styles = ((UserLayer) styledLayer).getUserStyles(); + + } else if (styledLayer instanceof NamedLayer) { + + styles = ((NamedLayer) styledLayer).getStyles(); + + } + + if (styles.length == 1) { + + style = styles[0]; + + } else { + + for (Style styleTmp : styles) { + + if (StringUtils.isBlank(styleName) && styleTmp.isDefault() + || styleTmp.getName().equals(styleName)) { + + style = styleTmp; + } + } + } + } + + return style; + + } + + protected Style findStyle(StyledLayerDescriptor styledLayerDescriptor, final String layerName, String styleName) { + + Style style = findStyle(styledLayerDescriptor, layerName, styleName, null); + + if (style == null) { + throw new ObserveTechnicalException(String.format("No style found for layer name '%s' and style name '%s'", layerName, styleName)); + } + return style; + + } + +} diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java index 40994fb..45359a3 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java @@ -22,57 +22,21 @@ package fr.ird.observe.ui.util.tripMap; * #L% */ -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.GeometryFactory; -import com.vividsolutions.jts.geom.LineString; -import com.vividsolutions.jts.geom.MultiPoint; import fr.ird.observe.DataService; import fr.ird.observe.ObserveConfig; import fr.ird.observe.ObserveContext; import fr.ird.observe.ObserveTechnicalException; import fr.ird.observe.db.DataSource; -import fr.ird.observe.db.DataSourceException; +import fr.ird.observe.entities.Entities; import fr.ird.observe.tripMap.TripMapPoint; -import fr.ird.observe.tripMap.TripMapPointType; import fr.ird.observe.ui.UIHelper; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.time.DateUtils; -import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.geotools.data.FileDataStore; -import org.geotools.data.FileDataStoreFinder; -import org.geotools.data.simple.SimpleFeatureSource; -import org.geotools.factory.CommonFactoryFinder; -import org.geotools.feature.DefaultFeatureCollection; -import org.geotools.feature.simple.SimpleFeatureBuilder; -import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.geometry.DirectPosition2D; -import org.geotools.geometry.jts.JTSFactoryFinder; import org.geotools.geometry.jts.ReferencedEnvelope; -import org.geotools.map.FeatureLayer; -import org.geotools.map.Layer; -import org.geotools.map.MapContent; -import org.geotools.referencing.CRS; -import org.geotools.styling.NamedLayer; -import org.geotools.styling.SLD; -import org.geotools.styling.SLDParser; -import org.geotools.styling.Style; -import org.geotools.styling.StyleFactory; -import org.geotools.styling.StyledLayer; -import org.geotools.styling.StyledLayerDescriptor; -import org.geotools.styling.UserLayer; import org.geotools.swing.JMapPane; import org.geotools.swing.event.MapPaneEvent; import org.geotools.swing.event.MapPaneListener; -import org.opengis.feature.simple.SimpleFeature; -import org.opengis.feature.simple.SimpleFeatureType; import javax.imageio.ImageIO; import javax.swing.JOptionPane; @@ -87,13 +51,8 @@ import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.List; -import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -102,19 +61,8 @@ import static org.nuiton.i18n.I18n.t; */ public class TripMapUIHandler { - public static final String TRIP_LINES_LAYER_NAME = "Trip lines"; - public static final String TRIP_POINTS_LAYER_NAME = "Trip points"; public static final double ZOOM_STEP_RATIO = 0.1; - protected static final Set<TripMapPointType> TRIP_MAP_POINT_TYPES_IN_LEGEND = ImmutableSet.of( - TripMapPointType.SEINE_ACTIVITY_IN_HARBOUR, - TripMapPointType.SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE, - TripMapPointType.SEINE_ACTIVITY_WITH_OBJECT_SCHOOL_TYPE, - TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_START, - TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_END, - TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_START, - TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_END); - public static TripMapUIHandler newHandler(TripMapUI view) { return new TripMapUIHandler(view); } @@ -169,11 +117,38 @@ public class TripMapUIHandler { List<TripMapPoint> tripMapPoints = dataService.loadTripMapActivityPoints(dataSource, tripId); ObserveMapPane mapPane = getObserveMapPane(); - Pair<MapContent, List<ObserveMapPaneLegendItem>> buildMapContent = buildMapContent(tripMapPoints); - mapPane.setMapContent(buildMapContent.getKey()); - mapPane.setLegendItems(buildMapContent.getValue()); - } catch (DataSourceException e) { + TripMapContentBuilder mapContentBuilder = new TripMapContentBuilder(); + mapContentBuilder.setStyledLayerDescriptor(config.getMapStyleFile()); + + for (File layerFile : config.getMapLayerFiles()) { + mapContentBuilder.addLayer(layerFile); + } + + if (Entities.isSeineId(tripId)) { + + mapContentBuilder.addTripLine(tripMapPoints); + + } else if (Entities.isLonglineId(tripId)) { + + mapContentBuilder.addLonglineFishingZone(tripMapPoints); + mapContentBuilder.addLonglineLine(tripMapPoints); + + } + + mapContentBuilder.addPoints(tripMapPoints); + + // set zoom + tripArea = new ReferencedEnvelope(); + for (TripMapPoint point : tripMapPoints) { + tripArea.expandToInclude(new DirectPosition2D(point.getLongitude(), point.getLatitude())); + } + tripArea.expandBy(1.1); + + mapPane.setMapContent(mapContentBuilder.getMapContent()); + mapPane.setLegendItems(mapContentBuilder.getLegendItems()); + + } catch (Exception e) { throw new ObserveTechnicalException("Unable to load trip map activity points", e); } finally { ObserveContext.get().getObserveMainUI().setBusy(false); @@ -226,263 +201,6 @@ public class TripMapUIHandler { } } - - - protected Pair<MapContent, List<ObserveMapPaneLegendItem>> buildMapContent(List<TripMapPoint> tripMapPoints) { - - MapContent mapContent = new MapContent(); - List<ObserveMapPaneLegendItem> legendItems = Lists.newArrayList(); - - if (tripMapPoints != null) { - try { - - StyledLayerDescriptor styledLayerDescriptor = importStyledLayerDescriptor(); - - for (File layerFile : config.getMapLayerFiles()) { - FileDataStore store = FileDataStoreFinder.getDataStore(layerFile); - SimpleFeatureSource featureSource = store.getFeatureSource(); - Style style = SLD.createSimpleStyle(featureSource.getSchema()); - style = findStyle(styledLayerDescriptor, store.getNames().get(0).getLocalPart(), null, style); - Layer layer = new FeatureLayer(featureSource, style); - mapContent.addLayer(layer); - } - - SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM"); - - GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); - - SimpleFeatureTypeBuilder lineFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); - lineFeatureTypeBuilder.setName("lineBuilder"); - lineFeatureTypeBuilder.setCRS(CRS.decode("EPSG:4326", true)); - lineFeatureTypeBuilder.add("line", LineString.class); - lineFeatureTypeBuilder.add("label", String.class); - lineFeatureTypeBuilder.add("type", String.class); - - SimpleFeatureType lineFeatureType = lineFeatureTypeBuilder.buildFeatureType(); - SimpleFeatureBuilder lineBuilder = new SimpleFeatureBuilder(lineFeatureType); - - DefaultFeatureCollection linesFeatures = new DefaultFeatureCollection(); - - List<Coordinate> coordinatesByDay = null; - - TripMapPoint previousPoint = null; - - for (TripMapPoint point : tripMapPoints) { - if (previousPoint == null) { - coordinatesByDay = Lists.newLinkedList(); - } else if (!DateUtils.isSameDay(previousPoint.getTime(), point.getTime())) { - - if (coordinatesByDay.size() > 1) { - LineString line = geometryFactory.createLineString(coordinatesByDay.toArray(new Coordinate[0])); - lineBuilder.add(line); - lineBuilder.add(dateFormat.format(previousPoint.getTime())); - lineBuilder.add("tripDay"); - SimpleFeature feature = lineBuilder.buildFeature(null); - - linesFeatures.add(feature); - } - - - Coordinate[] coordinates = { - new Coordinate(previousPoint.getLongitude(), previousPoint.getLatitude()), - new Coordinate(point.getLongitude(), point.getLatitude()), - }; - LineString lineBetweenTwoDays = geometryFactory.createLineString(coordinates); - lineBuilder.add(lineBetweenTwoDays); - lineBuilder.add(DateFormat.getDateInstance().format(previousPoint.getTime())); - lineBuilder.add("tripBetweenTwoDays"); - linesFeatures.add(lineBuilder.buildFeature(null)); - - coordinatesByDay = Lists.newLinkedList(); - } - - Coordinate coordinate = new Coordinate(point.getLongitude(), point.getLatitude()); - coordinatesByDay.add(coordinate); - - previousPoint = point; - } - - if (coordinatesByDay.size() > 1) { - LineString line = geometryFactory.createLineString(coordinatesByDay.toArray(new Coordinate[0])); - lineBuilder.add(line); - lineBuilder.add(dateFormat.format(previousPoint.getTime())); - lineBuilder.add("tripDay"); - linesFeatures.add(lineBuilder.buildFeature(null)); - } - - Style styleLines = findStyle(styledLayerDescriptor, TRIP_LINES_LAYER_NAME, null); - Layer layerLines = new FeatureLayer(linesFeatures, styleLines); - mapContent.addLayer(layerLines); - - - // add line in legend - LineString line = geometryFactory.createLineString(ObserveMapPaneLegendItem.lineCoordinates()); - lineBuilder.add(line); - lineBuilder.add(""); - lineBuilder.add("tripDay"); - - ObserveMapPaneLegendItem legendTripDay = new ObserveMapPaneLegendItem( - lineBuilder.buildFeature(null), - styleLines, - t("observe.map.legend.tripDay")); - legendItems.add(legendTripDay); - - lineBuilder.add(line); - lineBuilder.add(""); - lineBuilder.add("tripBetweenTwoDays"); - ObserveMapPaneLegendItem legendTripBetweenTwoDays = new ObserveMapPaneLegendItem( - lineBuilder.buildFeature(null), - styleLines, - t("observe.map.legend.tripBetweenTwoDays")); - legendItems.add(legendTripBetweenTwoDays); - - - // add Point - SimpleFeatureTypeBuilder pointFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); - pointFeatureTypeBuilder.setName("point Builder"); - pointFeatureTypeBuilder.setCRS(CRS.decode("EPSG:4326", true)); - pointFeatureTypeBuilder.add("points", MultiPoint.class); - pointFeatureTypeBuilder.add("pointType", String.class); - - SimpleFeatureType pointFeatureType = pointFeatureTypeBuilder.buildFeatureType(); - SimpleFeatureBuilder pointBuilder = new SimpleFeatureBuilder(pointFeatureType); - - DefaultFeatureCollection pointsFeatures = new DefaultFeatureCollection(); - - Style stylePoints = findStyle(styledLayerDescriptor, TRIP_POINTS_LAYER_NAME, null); - - - for (final TripMapPointType type : TripMapPointType.values()) { - - Iterable<Coordinate> coordinates = Iterables.transform( - Iterables.filter(tripMapPoints, new Predicate<TripMapPoint>() { - @Override - public boolean apply(TripMapPoint input) { - return type.equals(input.getType()); - } - }), - new Function<TripMapPoint, Coordinate>() { - @Override - public Coordinate apply(TripMapPoint input) { - return new Coordinate(input.getLongitude(), input.getLatitude()); - } - }); - - ArrayList<Coordinate> coordinatesArray = Lists.newArrayList(coordinates); - if (! coordinatesArray.isEmpty()) { - MultiPoint points = geometryFactory.createMultiPoint(coordinatesArray.toArray(new Coordinate[0])); - pointBuilder.add(points); - pointBuilder.add(type.name()); - pointsFeatures.add(pointBuilder.buildFeature(null)); - - - // add point in legend - if (TRIP_MAP_POINT_TYPES_IN_LEGEND.contains(type)) { - points = geometryFactory.createMultiPoint(ObserveMapPaneLegendItem.pointCoordinates()); - pointBuilder.add(points); - pointBuilder.add(type.name()); - - ObserveMapPaneLegendItem legendPoint = new ObserveMapPaneLegendItem( - pointBuilder.buildFeature(null), - stylePoints, - type.getLabel()); - legendItems.add(legendPoint); - } - - } - } - - Layer pointsLayer = new FeatureLayer(pointsFeatures, stylePoints); - mapContent.addLayer(pointsLayer); - // set zoom - - tripArea = new ReferencedEnvelope(); - for (TripMapPoint point : tripMapPoints) { - tripArea.expandToInclude(new DirectPosition2D(point.getLongitude(), point.getLatitude())); - } - tripArea.expandBy(1.1); - - - } catch (Exception e) { - throw new ObserveTechnicalException("Unable to build content map", e); - } - } - - return Pair.of(mapContent, legendItems); - } - - protected StyledLayerDescriptor importStyledLayerDescriptor() throws FileNotFoundException { - - File styleFile = config.getMapStyleFile(); - - StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory(null); - - SLDParser stylereader = new SLDParser(styleFactory, styleFile); - - StyledLayerDescriptor styledLayerDescriptor = stylereader.parseSLD(); - - return styledLayerDescriptor; - } - - protected Style findStyle(StyledLayerDescriptor styledLayerDescriptor, final String layerName, String styleName, Style defaultStyle) { - - Optional<StyledLayer> styledLayerOptional = Iterables.tryFind(styledLayerDescriptor.layers(), new Predicate<StyledLayer>() { - @Override - public boolean apply(StyledLayer input) { - return input.getName().equals(layerName); - } - }); - - Style style = defaultStyle; - - if (styledLayerOptional.isPresent()) { - - StyledLayer styledLayer = styledLayerOptional.get(); - - Style[] styles = new Style[0]; - - if (styledLayer instanceof UserLayer) { - - styles = ((UserLayer) styledLayer).getUserStyles(); - - } else if (styledLayer instanceof NamedLayer) { - - styles = ((NamedLayer) styledLayer).getStyles(); - - } - - if (styles.length == 1) { - - style = styles[0]; - - } else { - - for (Style styleTmp : styles) { - - if (StringUtils.isBlank(styleName) && styleTmp.isDefault() - || styleTmp.getName().equals(styleName)) { - - style = styleTmp; - } - } - } - } - - return style; - - } - - protected Style findStyle(StyledLayerDescriptor styledLayerDescriptor, final String layerName, String styleName) { - - Style style = findStyle(styledLayerDescriptor, layerName, styleName, null); - - if (style == null) { - throw new ObserveTechnicalException(String.format("No style found for layer name '%s' and style name '%s'", layerName, styleName)); - } - return style; - - } - protected double zoomRatio = 1; protected Point zoomCenter; @@ -524,15 +242,10 @@ public class TripMapUIHandler { zoomRatio = 1; - } - } - - - private class MouseMapListener implements MouseWheelListener, MouseListener, MouseMotionListener { @Override diff --git a/observe-swing/src/main/map/style.xml b/observe-swing/src/main/map/style.xml index 7305fd4..bcf9aa8 100644 --- a/observe-swing/src/main/map/style.xml +++ b/observe-swing/src/main/map/style.xml @@ -88,18 +88,98 @@ </NamedLayer> <NamedLayer> - <Name>Trip points</Name> + <Name>Trip longline zone</Name> <UserStyle> <IsDefault>true</IsDefault> + <Title>SLD Cook Book: Simple Line</Title> <FeatureTypeStyle> <Rule> - <Name>Point seine activity in harbour</Name> + <Name>Trip day</Name> + <PolygonSymbolizer> + <Fill> + <CssParameter name="fill">#000080</CssParameter> + <CssParameter name="fill-opacity">0.5</CssParameter> + </Fill> + </PolygonSymbolizer> + </Rule> + </FeatureTypeStyle> + </UserStyle> + </NamedLayer> + + <NamedLayer> + <Name>Trip longline line</Name> + <UserStyle> + <IsDefault>true</IsDefault> + <Title>SLD Cook Book: Simple Line</Title> + <FeatureTypeStyle> + <Rule> + <Name>setting</Name> <ogc:Filter> <ogc:PropertyIsEqualTo> - <ogc:PropertyName>pointType</ogc:PropertyName> - <ogc:Literal>SEINE_ACTIVITY_IN_HARBOUR</ogc:Literal> + <ogc:PropertyName>type</ogc:PropertyName> + <ogc:Literal>setting</ogc:Literal> + </ogc:PropertyIsEqualTo> + </ogc:Filter> + <LineSymbolizer> + <Stroke> + <CssParameter name="stroke">#00ff00</CssParameter> + <CssParameter name="stroke-width">2</CssParameter> + </Stroke> + </LineSymbolizer> + </Rule> + </FeatureTypeStyle> + <FeatureTypeStyle> + <Rule> + <Name>hauling</Name> + <ogc:Filter> + <ogc:PropertyIsEqualTo> + <ogc:PropertyName>type</ogc:PropertyName> + <ogc:Literal>hauling</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> + <LineSymbolizer> + <Stroke> + <CssParameter name="stroke">#ff0000</CssParameter> + <CssParameter name="stroke-width">2</CssParameter> + </Stroke> + </LineSymbolizer> + </Rule> + </FeatureTypeStyle> + </UserStyle> + </NamedLayer> + + + <NamedLayer> + <Name>Trip points</Name> + <UserStyle> + <IsDefault>true</IsDefault> + <FeatureTypeStyle> + <Rule> + <Name>Point seine activity in harbour</Name> + <ogc:Filter> + <ogc:Or> + <ogc:PropertyIsEqualTo> + <ogc:PropertyName>pointType</ogc:PropertyName> + <ogc:Literal>SEINE_DEPARTURE_HARBOUR</ogc:Literal> + </ogc:PropertyIsEqualTo> + <ogc:PropertyIsEqualTo> + <ogc:PropertyName>pointType</ogc:PropertyName> + <ogc:Literal>SEINE_LANDING_HARBOUR</ogc:Literal> + </ogc:PropertyIsEqualTo> + <ogc:PropertyIsEqualTo> + <ogc:PropertyName>pointType</ogc:PropertyName> + <ogc:Literal>SEINE_ACTIVITY_IN_HARBOUR</ogc:Literal> + </ogc:PropertyIsEqualTo> + <ogc:PropertyIsEqualTo> + <ogc:PropertyName>pointType</ogc:PropertyName> + <ogc:Literal>LONGLINE_DEPARTURE_HARBOUR</ogc:Literal> + </ogc:PropertyIsEqualTo> + <ogc:PropertyIsEqualTo> + <ogc:PropertyName>pointType</ogc:PropertyName> + <ogc:Literal>LONGLINE_LANDING_HARBOUR</ogc:Literal> + </ogc:PropertyIsEqualTo> + </ogc:Or> + </ogc:Filter> <PointSymbolizer> <Graphic> <Mark> @@ -112,7 +192,7 @@ <CssParameter name="stroke-width">1</CssParameter> </Stroke> </Mark> - <Size>16</Size> + <Size>12</Size> </Graphic> </PointSymbolizer> </Rule> @@ -185,7 +265,7 @@ <PointSymbolizer> <Graphic> <Mark> - <WellKnownName>X</WellKnownName> + <WellKnownName>Triangle</WellKnownName> <Fill> <CssParameter name="fill">#00FF00</CssParameter> </Fill> @@ -213,7 +293,7 @@ <PointSymbolizer> <Graphic> <Mark> - <WellKnownName>Circle</WellKnownName> + <WellKnownName>X</WellKnownName> <Fill> <CssParameter name="fill">#00FF00</CssParameter> </Fill> @@ -241,7 +321,7 @@ <PointSymbolizer> <Graphic> <Mark> - <WellKnownName>X</WellKnownName> + <WellKnownName>Triangle</WellKnownName> <Fill> <CssParameter name="fill">#FF0000</CssParameter> </Fill> @@ -256,7 +336,6 @@ </Rule> </FeatureTypeStyle> - <FeatureTypeStyle> <Rule> <Name>Point longline activity with hauling end</Name> @@ -269,7 +348,7 @@ <PointSymbolizer> <Graphic> <Mark> - <WellKnownName>Circle</WellKnownName> + <WellKnownName>X</WellKnownName> <Fill> <CssParameter name="fill">#FF0000</CssParameter> </Fill> @@ -284,6 +363,60 @@ </Rule> </FeatureTypeStyle> + <FeatureTypeStyle> + <Rule> + <Name>Point longline activity with interaction</Name> + <ogc:Filter> + <ogc:PropertyIsEqualTo> + <ogc:PropertyName>pointType</ogc:PropertyName> + <ogc:Literal>LONGLINE_ACTIVITY_WITH_INTERACTION</ogc:Literal> + </ogc:PropertyIsEqualTo> + </ogc:Filter> + <PointSymbolizer> + <Graphic> + <Mark> + <WellKnownName>Circle</WellKnownName> + <Fill> + <CssParameter name="fill">#FFFF00</CssParameter> + </Fill> + <Stroke> + <CssParameter name="stroke">#000000</CssParameter> + <CssParameter name="stroke-width">1</CssParameter> + </Stroke> + </Mark> + <Size>12</Size> + </Graphic> + </PointSymbolizer> + </Rule> + </FeatureTypeStyle> + + <FeatureTypeStyle> + <Rule> + <Name>Point longline activity with station</Name> + <ogc:Filter> + <ogc:PropertyIsEqualTo> + <ogc:PropertyName>pointType</ogc:PropertyName> + <ogc:Literal>LONGLINE_ACTIVITY_WITH_STATION</ogc:Literal> + </ogc:PropertyIsEqualTo> + </ogc:Filter> + <PointSymbolizer> + <Graphic> + <Mark> + <WellKnownName>star</WellKnownName> + <Fill> + <CssParameter name="fill">#FFFF00</CssParameter> + </Fill> + <Stroke> + <CssParameter name="stroke">#000000</CssParameter> + <CssParameter name="stroke-width">1</CssParameter> + </Stroke> + </Mark> + <Size>16</Size> + </Graphic> + </PointSymbolizer> + </Rule> + </FeatureTypeStyle> + </UserStyle> </NamedLayer> diff --git a/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties b/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties index a9f527a..ed1817a 100644 --- a/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties +++ b/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties @@ -1281,6 +1281,8 @@ observe.map.export.overwrite.cancel= observe.map.export.overwrite.ok= observe.map.export.overwrite.title= observe.map.export.success= +observe.map.legend.hauling= +observe.map.legend.setting= observe.map.legend.tripBetweenTwoDays= observe.map.legend.tripDay= observe.map.miles= diff --git a/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties b/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties index 310858c..09e6ee1 100644 --- a/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties +++ b/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties @@ -1283,6 +1283,8 @@ observe.map.export.overwrite.cancel= observe.map.export.overwrite.ok= observe.map.export.overwrite.title= observe.map.export.success= +observe.map.legend.hauling= +observe.map.legend.setting= observe.map.legend.tripBetweenTwoDays= observe.map.legend.tripDay= observe.map.miles= diff --git a/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties b/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties index 9c0b3f6..e51734d 100644 --- a/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties +++ b/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties @@ -1276,6 +1276,8 @@ observe.map.export.overwrite.cancel=Annuler observe.map.export.overwrite.ok=Remplacer observe.map.export.overwrite.title=Attention observe.map.export.success=Carte exportée (%s) +observe.map.legend.hauling=Filage +observe.map.legend.setting=Virage observe.map.legend.tripBetweenTwoDays=Trajet entre deux jours observe.map.legend.tripDay=Trajet d'une journée observe.map.miles=milles -- 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 feature/7133 in repository observe. See http://git.codelutin.com/observe.git commit f21968e1433a4367465ada12fcdb489d58ec0d27 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri May 22 12:18:49 2015 +0200 refs #7132 #7133 : utilisation des id plutot que les code pour les types activité. pour les palangre ne gardé q'un type "au port" (départ et arrivé) --- .../entities/longline/TripLonglineDAOImpl.java | 20 +++++++++----------- .../ird/observe/entities/seine/TripSeineDAOImpl.java | 8 +++----- .../fr/ird/observe/tripMap/TripMapPointType.java | 3 +-- .../resources/i18n/observe-entities_en_GB.properties | 1 + .../resources/i18n/observe-entities_es_ES.properties | 1 + .../resources/i18n/observe-entities_fr_FR.properties | 3 +-- .../ui/util/tripMap/TripMapContentBuilder.java | 4 ++-- .../observe/ui/util/tripMap/TripMapUIHandler.java | 7 ++++++- observe-swing/src/main/map/style.xml | 14 +------------- 9 files changed, 25 insertions(+), 36 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java index 5677d27..d9fe3d8 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java @@ -46,8 +46,8 @@ import java.util.List; public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAOAbstract<E> { - public static final String ACTIVITY_INTERACTION_CODE = "INT"; - public static final String ACTIVITY_STATION_CODE = "SAMP"; + public static final String ACTIVITY_INTERACTION_ID = "fr.ird.observe.entities.referentiel.longline.VesselActivityLongline#1239832686138#0.4"; + public static final String ACTIVITY_STATION_ID = "fr.ird.observe.entities.referentiel.longline.VesselActivityLongline#1239832686138#0.3"; public int findPositionByProgramId(String programId, String tripId) throws TopiaException { int result = 0; @@ -92,7 +92,7 @@ public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAO departurePoint.setTime(tripLongline.getStartDate()); departurePoint.setLatitude(departureHarbour.getLatitude()); departurePoint.setLongitude(departureHarbour.getLongitude()); - departurePoint.setType(TripMapPointType.LONGLINE_DEPARTURE_HARBOUR); + departurePoint.setType(TripMapPointType.LONGLINE_IN_HARBOUR); tripMapPoints.add(departurePoint); } @@ -112,7 +112,7 @@ public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAO landingPoint.setTime(tripLongline.getEndDate()); landingPoint.setLatitude(landingHarbour.getLatitude()); landingPoint.setLongitude(landingHarbour.getLongitude()); - landingPoint.setType(TripMapPointType.LONGLINE_LANDING_HARBOUR); + landingPoint.setType(TripMapPointType.LONGLINE_IN_HARBOUR); tripMapPoints.add(landingPoint); } @@ -125,7 +125,7 @@ public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAO " a.timestamp, " + " a.latitude," + " a.longitude," + - " v.code," + + " a.vesselActivity," + " s.settingStartTimestamp," + " s.settingStartLatitude," + " s.settingStartLongitude," + @@ -139,8 +139,6 @@ public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAO " s.haulingEndLatitude," + " s.haulingEndLongitude" + " FROM observe_longLine.activity a" + - " LEFT OUTER JOIN observe_longLine.vesselActivity v" + - " ON v.topiaid = a.vesselActivity" + " LEFT OUTER JOIN observe_longLine.set s" + " ON s.topiaId = a.set" + " WHERE a.trip = ?" + @@ -170,12 +168,12 @@ public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAO activity.setLatitude(resultSet.getFloat(2)); activity.setLongitude(resultSet.getFloat(3)); - String vesselActivityCode = resultSet.getString(4); - if (vesselActivityCode == null) { + String vesselActivityId = resultSet.getString(4); + if (vesselActivityId == null) { activity.setType(TripMapPointType.LONGLINE_ACTIVITY); - } else if (vesselActivityCode.equals(ACTIVITY_INTERACTION_CODE)) { + } else if (vesselActivityId.equals(ACTIVITY_INTERACTION_ID)) { activity.setType(TripMapPointType.LONGLINE_ACTIVITY_WITH_INTERACTION); - } else if (vesselActivityCode.equals(ACTIVITY_STATION_CODE)) { + } else if (vesselActivityId.equals(ACTIVITY_STATION_ID)) { activity.setType(TripMapPointType.LONGLINE_ACTIVITY_WITH_STATION); } else { activity.setType(TripMapPointType.LONGLINE_ACTIVITY); diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java index 368a267..51f623a 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java @@ -51,7 +51,7 @@ import java.util.List; */ public class TripSeineDAOImpl<E extends TripSeine> extends TripSeineDAOAbstract<E> { - public static final int ACTIVITY_HARBOUR_CODE = 0; + public static final String ACTIVITY_HARBOUR_ID = "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1239832675349#0.363119635949572"; public int findPositionByProgramId(String programId, String tripId) throws TopiaException { int result = 0; @@ -123,13 +123,11 @@ public class TripSeineDAOImpl<E extends TripSeine> extends TripSeineDAOAbstract< " a.time, " + " a.latitude," + " a.longitude," + - " v.code, " + + " a.vesselactivity, " + " s.schoolType" + " FROM observe_seine.route r" + " INNER JOIN observe_seine.activity a" + " ON a.route = r.topiaId" + - " INNER JOIN observe_seine.vesselactivity v" + - " ON a.vesselactivity = v.topiaid" + " LEFT OUTER JOIN observe_seine.set s" + " ON s.topiaId = a.set" + " WHERE r.trip = ?" + @@ -156,7 +154,7 @@ public class TripSeineDAOImpl<E extends TripSeine> extends TripSeineDAOAbstract< point.setTime(time); point.setLatitude(resultSet.getFloat(3)); point.setLongitude(resultSet.getFloat(4)); - if (resultSet.getInt(5) == ACTIVITY_HARBOUR_CODE) { + if (resultSet.getString(5) == ACTIVITY_HARBOUR_ID) { point.setType(TripMapPointType.SEINE_ACTIVITY_IN_HARBOUR); } else if (resultSet.getString(6) == null) { point.setType(TripMapPointType.SEINE_ACTIVITY); diff --git a/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java b/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java index 04fdaa2..173f00d 100644 --- a/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java +++ b/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java @@ -37,8 +37,7 @@ public enum TripMapPointType { SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE(n("observe.map.seine.activity.schollType.free")), SEINE_ACTIVITY_WITH_OBJECT_SCHOOL_TYPE(n("observe.map.seine.activity.schollType.object")), - LONGLINE_DEPARTURE_HARBOUR(n("observe.map.longLine.seine.harbour.departure")), - LONGLINE_LANDING_HARBOUR(n("observe.map.longLine.seine.harbour.landing")), + LONGLINE_IN_HARBOUR(n("observe.map.longLine.seine.harbour")), LONGLINE_ACTIVITY(n("observe.map.longLine.activity")), LONGLINE_ACTIVITY_WITH_SETTING_START(n("observe.map.longLine.activity.setting.start")), LONGLINE_ACTIVITY_WITH_SETTING_END(n("observe.map.longLine.activity.setting.end")), diff --git a/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties b/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties index a4a8c32..d38c4e5 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties @@ -27,6 +27,7 @@ observe.map.longLine.activity.interaction= observe.map.longLine.activity.setting.end= observe.map.longLine.activity.setting.start= observe.map.longLine.activity.station= +observe.map.longLine.seine.harbour= observe.map.longLine.seine.harbour.departure= observe.map.longLine.seine.harbour.landing= observe.map.seine.activity= diff --git a/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties b/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties index ebb20b1..6e1ff8a 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties @@ -27,6 +27,7 @@ observe.map.longLine.activity.interaction= observe.map.longLine.activity.setting.end= observe.map.longLine.activity.setting.start= observe.map.longLine.activity.station= +observe.map.longLine.seine.harbour= observe.map.longLine.seine.harbour.departure= observe.map.longLine.seine.harbour.landing= observe.map.seine.activity= diff --git a/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties b/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties index 74354e3..ead0aa8 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties @@ -27,8 +27,7 @@ observe.map.longLine.activity.interaction=Rencontre observe.map.longLine.activity.setting.end=Fin de virage observe.map.longLine.activity.setting.start=Début de virage observe.map.longLine.activity.station=Station océanographique -observe.map.longLine.seine.harbour.departure=Port de départ -observe.map.longLine.seine.harbour.landing=Port d'arrivée +observe.map.longLine.seine.harbour=Au port observe.map.seine.activity=point d'activité observe.map.seine.activity.inHarbour=Au port observe.map.seine.activity.schollType.free=Banc libre diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapContentBuilder.java b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapContentBuilder.java index ad2df49..b9d1d2e 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapContentBuilder.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapContentBuilder.java @@ -65,8 +65,7 @@ public class TripMapContentBuilder { TripMapPointType.SEINE_ACTIVITY_IN_HARBOUR, TripMapPointType.SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE, TripMapPointType.SEINE_ACTIVITY_WITH_OBJECT_SCHOOL_TYPE, - TripMapPointType.LONGLINE_DEPARTURE_HARBOUR, - TripMapPointType.LONGLINE_LANDING_HARBOUR, + TripMapPointType.LONGLINE_IN_HARBOUR, TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_START, TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_END, TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_START, @@ -232,6 +231,7 @@ public class TripMapContentBuilder { Polygon polygon = geometryFactory.createPolygon(coordinates); + //polygon = (Polygon) polygon.convexHull(); // permet de transformer un poliqgone croisé en polygon convex polygonBuilder.add(polygon); polygonBuilder.add("longlineFishingZone"); SimpleFeature feature = polygonBuilder.buildFeature(null); diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java index 45359a3..71ab03b 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java @@ -113,10 +113,15 @@ public class TripMapUIHandler { ((CardLayout) view.getLayout()).first(view); ObserveContext.get().getObserveMainUI().setBusy(true); + ObserveMapPane mapPane = getObserveMapPane(); + + if (mapPane.getMapContent() != null) { + // appeler pour libéré les listeners + mapPane.getMapContent().dispose(); + } List<TripMapPoint> tripMapPoints = dataService.loadTripMapActivityPoints(dataSource, tripId); - ObserveMapPane mapPane = getObserveMapPane(); TripMapContentBuilder mapContentBuilder = new TripMapContentBuilder(); mapContentBuilder.setStyledLayerDescriptor(config.getMapStyleFile()); diff --git a/observe-swing/src/main/map/style.xml b/observe-swing/src/main/map/style.xml index bcf9aa8..15b2bd9 100644 --- a/observe-swing/src/main/map/style.xml +++ b/observe-swing/src/main/map/style.xml @@ -160,23 +160,11 @@ <ogc:Or> <ogc:PropertyIsEqualTo> <ogc:PropertyName>pointType</ogc:PropertyName> - <ogc:Literal>SEINE_DEPARTURE_HARBOUR</ogc:Literal> - </ogc:PropertyIsEqualTo> - <ogc:PropertyIsEqualTo> - <ogc:PropertyName>pointType</ogc:PropertyName> - <ogc:Literal>SEINE_LANDING_HARBOUR</ogc:Literal> - </ogc:PropertyIsEqualTo> - <ogc:PropertyIsEqualTo> - <ogc:PropertyName>pointType</ogc:PropertyName> <ogc:Literal>SEINE_ACTIVITY_IN_HARBOUR</ogc:Literal> </ogc:PropertyIsEqualTo> <ogc:PropertyIsEqualTo> <ogc:PropertyName>pointType</ogc:PropertyName> - <ogc:Literal>LONGLINE_DEPARTURE_HARBOUR</ogc:Literal> - </ogc:PropertyIsEqualTo> - <ogc:PropertyIsEqualTo> - <ogc:PropertyName>pointType</ogc:PropertyName> - <ogc:Literal>LONGLINE_LANDING_HARBOUR</ogc:Literal> + <ogc:Literal>LONGLINE_IN_HARBOUR</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Or> </ogc:Filter> -- 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