Sammoa-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- 446 discussions
10 Aug '12
Author: tchemit
Date: 2012-08-10 12:07:01 +0200 (Fri, 10 Aug 2012)
New Revision: 385
Url: http://forge.codelutin.com/repositories/revision/sammoa/385
Log:
svn ignore logback-test.xml on main resources
Modified:
trunk/sammoa-ui-swing/src/main/resources/
Property changes on: trunk/sammoa-ui-swing/src/main/resources
___________________________________________________________________
Added: svn:ignore
+ logback-test.xml
1
0
r384 - trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController
by tchemit@users.forge.codelutin.com 10 Aug '12
by tchemit@users.forge.codelutin.com 10 Aug '12
10 Aug '12
Author: tchemit
Date: 2012-08-10 12:05:55 +0200 (Fri, 10 Aug 2012)
New Revision: 384
Url: http://forge.codelutin.com/repositories/revision/sammoa/384
Log:
remove milli-secondes on geoPoins date
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java 2012-08-10 09:29:39 UTC (rev 383)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java 2012-08-10 10:05:55 UTC (rev 384)
@@ -53,6 +53,7 @@
import fr.ulr.sammoa.persistence.SammoaDAOHelper;
import fr.ulr.sammoa.persistence.SammoaPersistence;
import fr.ulr.sammoa.persistence.TransectFlight;
+import org.apache.commons.lang3.time.DateUtils;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.TopiaRuntimeException;
@@ -797,6 +798,9 @@
Date result;
if (geoPoint == null) {
result = new Date();
+
+ // always remove milli-seconds
+ DateUtils.setMilliseconds(result, 0);
if (logger.isWarnEnabled()) {
logger.warn("No GPS point at {}", result);
}
@@ -811,6 +815,9 @@
result = geoPoint.getRecordTime();
+ // always remove milli-seconds
+ DateUtils.setMilliseconds(result, 0);
+
GeoPointDAO dao = SammoaDAOHelper.getGeoPointDAO(transaction);
geoPoint.setFlight(flight);
1
0
r383 - trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations
by tchemit@users.forge.codelutin.com 10 Aug '12
by tchemit@users.forge.codelutin.com 10 Aug '12
10 Aug '12
Author: tchemit
Date: 2012-08-10 11:29:39 +0200 (Fri, 10 Aug 2012)
New Revision: 383
Url: http://forge.codelutin.com/repositories/revision/sammoa/383
Log:
fixes #1396: Table des routes non ?\195?\169ditable sur certaines cellules (utilisation d'un seul constructeur sur les m?\195?\169tas d'un mod?\195?\168le de tableau)
Modified:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/ObservationTableModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/RouteTableModel.java
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/ObservationTableModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/ObservationTableModel.java 2012-08-09 18:35:24 UTC (rev 382)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/ObservationTableModel.java 2012-08-10 09:29:39 UTC (rev 383)
@@ -128,15 +128,15 @@
public enum ObservationColumn {
- OBSERVATION_NUMBER(false, Observation.PROPERTY_OBSERVATION_NUMBER),
+ OBSERVATION_NUMBER(false, String.class, Observation.PROPERTY_OBSERVATION_NUMBER),
OBSERVATION_TIME(false, Date.class, Observation.PROPERTY_OBSERVATION_TIME),
- OBSERVER(false,
+ OBSERVER(false,String.class,
Observation.PROPERTY_OBSERVER_POSITION,
ObserverPosition.PROPERTY_OBSERVER,
Observer.PROPERTY_INITIALS
),
POD_SIZE(true, int.class, Observation.PROPERTY_POD_SIZE),
- SPECIES(true, Observation.PROPERTY_SPECIES, Species.PROPERTY_CODE) {
+ SPECIES(true, String.class, Observation.PROPERTY_SPECIES, Species.PROPERTY_CODE) {
@Override
public void setValue(Observation bean, Object value, Region region) {
String newValue = (String) value;
@@ -159,10 +159,10 @@
}
}
},
- AGE(true, Observation.PROPERTY_AGE),
+ AGE(true, String.class, Observation.PROPERTY_AGE),
DEC_ANGLE(true, int.class, Observation.PROPERTY_DEC_ANGLE),
- CUE(true, Observation.PROPERTY_CUE),
- BEHAVIOUR(true, Observation.PROPERTY_BEHAVIOUR) {
+ CUE(true, String.class, Observation.PROPERTY_CUE),
+ BEHAVIOUR(true, String.class, Observation.PROPERTY_BEHAVIOUR) {
@Override
public void setValue(Observation bean, Object value, Region region) {
String newValue = (String) value;
@@ -173,9 +173,9 @@
}
},
SWIM_DIR(true, int.class, Observation.PROPERTY_SWIM_DIR),
- CALVES(true, Observation.PROPERTY_CALVES),
+ CALVES(true, String.class, Observation.PROPERTY_CALVES),
PHOTO(true, boolean.class, Observation.PROPERTY_PHOTO),
- COMMENT(true, Observation.PROPERTY_COMMENT),
+ COMMENT(true, String.class, Observation.PROPERTY_COMMENT),
OBSERVATION_STATUS(true, ObservationStatus.class, Observation.PROPERTY_OBSERVATION_STATUS),
DELETED(true, boolean.class, Observation.PROPERTY_DELETED),
CIRCLE_BACK(true, Observation.class, "circleBack") {
@@ -198,11 +198,6 @@
private final String columnName;
private ObservationColumn(boolean editable,
- String... beanProperties) {
- this(editable, String.class, beanProperties);
- }
-
- private ObservationColumn(boolean editable,
Class<?> type,
String... beanProperties) {
this.editable = editable;
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/RouteTableModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/RouteTableModel.java 2012-08-09 18:35:24 UTC (rev 382)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/RouteTableModel.java 2012-08-10 09:29:39 UTC (rev 383)
@@ -127,10 +127,10 @@
protected enum RouteColumn {
- EFFORT_NUMBER(false, Route.PROPERTY_EFFORT_NUMBER),
+ EFFORT_NUMBER(false, String.class, Route.PROPERTY_EFFORT_NUMBER),
BEGIN_TIME(false, Date.class, Route.PROPERTY_BEGIN_TIME),
- ROUTE_TYPE(false, Route.PROPERTY_ROUTE_TYPE),
- TRANSECT(false,
+ ROUTE_TYPE(false, String.class, Route.PROPERTY_ROUTE_TYPE),
+ TRANSECT(false,String.class,
Route.PROPERTY_TRANSECT_FLIGHT,
TransectFlight.PROPERTY_TRANSECT,
Transect.PROPERTY_NAME
@@ -163,10 +163,10 @@
GLARE_SEVERITY(true, int.class, Route.PROPERTY_GLARE_SEVERITY),
GLARE_UNDER(true, boolean.class, Route.PROPERTY_GLARE_UNDER),
CLOUD_COVER(true, int.class, Route.PROPERTY_CLOUD_COVER),
- SUBJECTIVE_CONDITIONS(true, Route.PROPERTY_SUBJECTIVE_CONDITIONS),
- UNEXPECTED_LEFT(true, Route.PROPERTY_UNEXPECTED_LEFT),
- UNEXEPECTED_RIGHT(true, Route.PROPERTY_UNEXPECTED_RIGHT),
- COMMENT(true, Route.PROPERTY_COMMENT),
+ SUBJECTIVE_CONDITIONS(true, String.class, Route.PROPERTY_SUBJECTIVE_CONDITIONS),
+ UNEXPECTED_LEFT(true, String.class, Route.PROPERTY_UNEXPECTED_LEFT),
+ UNEXEPECTED_RIGHT(true, String.class, Route.PROPERTY_UNEXPECTED_RIGHT),
+ COMMENT(true, String.class, Route.PROPERTY_COMMENT),
DELETED(true, boolean.class, Route.PROPERTY_DELETED);
private final boolean editable;
@@ -177,13 +177,7 @@
private final String columnName;
-
private RouteColumn(boolean editable,
- String... beanProperties) {
- this(editable, null, beanProperties);
- }
-
- private RouteColumn(boolean editable,
Class<?> type,
String... beanProperties) {
this.editable = editable;
1
0
r382 - in trunk: sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action sammoa-ui-swing/src/main/resources/i18n
by fdesbois@users.forge.codelutin.com 09 Aug '12
by fdesbois@users.forge.codelutin.com 09 Aug '12
09 Aug '12
Author: fdesbois
Date: 2012-08-09 20:35:24 +0200 (Thu, 09 Aug 2012)
New Revision: 382
Url: http://forge.codelutin.com/repositories/revision/sammoa/382
Log:
fixes #1394 : add tooltips
Modified:
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUI.jaxx
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/AddAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/BeginAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CenterObservationAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/EndAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/LeftObservationAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/RightObservationAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAction.java
trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -91,6 +91,7 @@
boolean result = Objects.equal(o1.getRouteType(), o2.getRouteType());
result &= Objects.equal(o1.getTransectFlight(), o2.getTransectFlight());
+ result &= Objects.equal(o1.getCircleBackCause(), o2.getCircleBackCause());
result &= Objects.equal(o1.isDeleted(), o2.isDeleted());
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUI.jaxx
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUI.jaxx 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUI.jaxx 2012-08-09 18:35:24 UTC (rev 382)
@@ -23,6 +23,8 @@
#L%
-->
<JFrame id='mainFrame' onWindowClosing='getHandler().closeSammoa()'
+ width='800'
+ height='600'
implements='fr.ulr.sammoa.ui.swing.SammoaUI<MainUIHandler>'>
<import>
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/AddAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/AddAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/AddAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -27,8 +27,11 @@
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import org.nuiton.util.Resource;
+import javax.swing.*;
import java.awt.event.ActionEvent;
+import static org.nuiton.i18n.I18n._;
+
/**
* Created: 03/07/12
*
@@ -38,6 +41,7 @@
public AddAction(SammoaUIContext context) {
super(Resource.getIcon("/icons/action-add.png"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.add.tip"));
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/BeginAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/BeginAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/BeginAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -28,8 +28,11 @@
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import org.nuiton.util.Resource;
+import javax.swing.*;
import java.awt.event.ActionEvent;
+import static org.nuiton.i18n.I18n._;
+
/**
* Created: 03/07/12
*
@@ -39,6 +42,7 @@
public BeginAction(SammoaUIContext context) {
super(Resource.getIcon("/icons/playback_play.png"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.begin.tip"));
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CenterObservationAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CenterObservationAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CenterObservationAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -26,6 +26,8 @@
import fr.ulr.sammoa.persistence.Position;
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
+import javax.swing.*;
+
import static org.nuiton.i18n.I18n._;
/**
@@ -37,5 +39,6 @@
public CenterObservationAction(SammoaUIContext context) {
super(_("sammoa.observation.observations.center"), context, Position.NAVIGATOR);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.center.tip"));
}
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/CircleBackAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -34,6 +34,8 @@
import java.awt.event.ActionEvent;
import java.util.List;
+import static org.nuiton.i18n.I18n._;
+
/**
* Created: 03/07/12
*
@@ -47,6 +49,7 @@
public CircleBackAction(SammoaUIContext context) {
super(CIRCLE_BACK_ICON, context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.circleBack.tip"));
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/EndAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/EndAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/EndAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -27,8 +27,11 @@
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import org.nuiton.util.Resource;
+import javax.swing.*;
import java.awt.event.ActionEvent;
+import static org.nuiton.i18n.I18n._;
+
/**
* Created: 03/07/12
*
@@ -38,6 +41,7 @@
public EndAction(SammoaUIContext context) {
super(Resource.getIcon("/icons/playback_stop.png"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.end.tip"));
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/LeftObservationAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/LeftObservationAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/LeftObservationAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -26,6 +26,8 @@
import fr.ulr.sammoa.persistence.Position;
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
+import javax.swing.*;
+
import static org.nuiton.i18n.I18n._;
/**
@@ -37,5 +39,6 @@
public LeftObservationAction(SammoaUIContext context) {
super(_("sammoa.observation.observations.left"), context, Position.FRONT_LEFT);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.left.tip"));
}
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -27,8 +27,11 @@
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import org.nuiton.util.Resource;
+import javax.swing.*;
import java.awt.event.ActionEvent;
+import static org.nuiton.i18n.I18n._;
+
/**
* Created: 03/07/12
*
@@ -38,6 +41,7 @@
public NextAction(SammoaUIContext context) {
super(Resource.getIcon("/icons/playback_next.png"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.next.tip"));
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -27,9 +27,11 @@
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import org.nuiton.util.Resource;
-import javax.swing.JComponent;
+import javax.swing.*;
import java.awt.event.ActionEvent;
+import static org.nuiton.i18n.I18n._;
+
/**
* Created: 03/07/12
*
@@ -41,6 +43,7 @@
public NextTransectAction(SammoaUIContext context) {
super(Resource.getIcon("/icons/action-next-transect.png"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.nextTransect.tip"));
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/RightObservationAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/RightObservationAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/RightObservationAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -26,6 +26,8 @@
import fr.ulr.sammoa.persistence.Position;
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
+import javax.swing.*;
+
import static org.nuiton.i18n.I18n._;
/**
@@ -37,5 +39,6 @@
public RightObservationAction(SammoaUIContext context) {
super(_("sammoa.observation.observations.right"), context, Position.FRONT_RIGHT);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.right.tip"));
}
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StartAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -27,8 +27,11 @@
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import org.nuiton.util.Resource;
+import javax.swing.*;
import java.awt.event.ActionEvent;
+import static org.nuiton.i18n.I18n._;
+
/**
* Created: 05/07/12
*
@@ -38,6 +41,7 @@
public StartAction(SammoaUIContext context) {
super(Resource.getIcon("/icons/playback_play.png"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.start.tip"));
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAction.java 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/StopAction.java 2012-08-09 18:35:24 UTC (rev 382)
@@ -27,8 +27,11 @@
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import org.nuiton.util.Resource;
+import javax.swing.*;
import java.awt.event.ActionEvent;
+import static org.nuiton.i18n.I18n._;
+
/**
* Created: 05/07/12
*
@@ -38,6 +41,7 @@
public StopAction(SammoaUIContext context) {
super(Resource.getIcon("/icons/playback_stop.png"), context);
+ putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.stop.tip"));
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties
===================================================================
--- trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-09 17:53:27 UTC (rev 381)
+++ trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-09 18:35:24 UTC (rev 382)
@@ -4,16 +4,20 @@
sammoa.about.message=About Sammoa
sammoa.action.about=About
sammoa.action.about.tip=About
+sammoa.action.add.tip=ADD \: create a new LEG route for the current Transect (the observation conditions have changed)
+sammoa.action.begin.tip=BEGIN \: begin effort to create a new LEG route for the next selected Transect
sammoa.action.break.tip=Break
sammoa.action.cancel=Cancel
sammoa.action.cancelExport=Cancel
+sammoa.action.center.tip=CENTER \: create a new Observation for the navigator's observer
sammoa.action.choose.export.directory=Accept
-sammoa.action.circleback.tip=Circle Back
+sammoa.action.circleBack.tip=CIRCLE-BACK \: create a CIRCLE_BACK route for this observation as cause
sammoa.action.close=Close
sammoa.action.configuration=Configuration
sammoa.action.configuration.tip=Configuration
sammoa.action.create=Create
sammoa.action.edit=Edit
+sammoa.action.end.tip=END \: end effort and create a new TRANSIT route
sammoa.action.export=Export
sammoa.action.exportEffortsMap=Export Efforts
sammoa.action.exportGeoPointsMap=Export GPS Points
@@ -22,25 +26,26 @@
sammoa.action.home=Home
sammoa.action.home.tip=Home
sammoa.action.import=Import
+sammoa.action.left.tip=LEFT \: create a new Observation for the observer on the left side
sammoa.action.locale.fr=fr
sammoa.action.locale.fr.tip=French
sammoa.action.locale.uk=en
sammoa.action.locale.uk.tip=English
sammoa.action.new=New
-sammoa.action.next.tip=Next
+sammoa.action.next.tip=NEXT \: end previous effort and create a new LEG route for the next selected Transect
+sammoa.action.nextTransect.tip=NEXT TRANSECT \: choose this transect to be the next one
sammoa.action.onBoard=On Board
-sammoa.action.play.tip=Play
sammoa.action.quitExportMaps=Quit
sammoa.action.reload.actions=Reload actions
sammoa.action.reload.gps=Reload GPS
sammoa.action.reload.ui=Reload sammoa ui
+sammoa.action.right.tip=RIGHT \: create a new Observation for the observer on the right side
sammoa.action.save=Save
sammoa.action.site=Site
sammoa.action.site.tip=Display project site
+sammoa.action.start.tip=START \: start the flight and create a new TRANSIT route
sammoa.action.startExport=Start
-sammoa.action.startFlight.tip=Start the flight
-sammoa.action.stop.tip=Stop
-sammoa.action.stopFlight.tip=Stop the flight
+sammoa.action.stop.tip=STOP \: stop the flight. No other actions on routes and observations could be done after stop.
sammoa.action.validation=Validation
sammoa.config.category.applications=Application
sammoa.config.category.applications.description=Application
1
0
r381 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application sammoa-application/src/main/java/fr/ulr/sammoa/application/map sammoa-application/src/test/java/fr/ulr/sammoa/application/map sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence src/site/rst
by tchemit@users.forge.codelutin.com 09 Aug '12
by tchemit@users.forge.codelutin.com 09 Aug '12
09 Aug '12
Author: tchemit
Date: 2012-08-09 19:53:27 +0200 (Thu, 09 Aug 2012)
New Revision: 381
Url: http://forge.codelutin.com/repositories/revision/sammoa/381
Log:
refs #1203: Export SHP
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/LegStatus.java
trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java
trunk/src/site/rst/import-export.rst
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-09 17:26:32 UTC (rev 380)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-09 17:53:27 UTC (rev 381)
@@ -25,6 +25,7 @@
package fr.ulr.sammoa.application;
import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -57,6 +58,7 @@
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.TopiaRuntimeException;
+import org.nuiton.util.PeriodDates;
import org.nuiton.util.TimeLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -96,6 +98,8 @@
public List<Flight> getFlights(Campaign campaign) {
+ Preconditions.checkNotNull(campaign);
+
long start = TimeLog.getTime();
List<Flight> result;
@@ -119,9 +123,65 @@
return result;
}
-
+
+ public Iterable<Flight> getFlights(Campaign campaign,
+ Date beginDate,
+ Date endDate) {
+
+ TopiaContext transaction = persistence.beginTransaction();
+ try {
+
+ Iterable<Flight> result = getFlights(transaction, campaign, beginDate, endDate);
+ return result;
+
+ } finally {
+ persistence.endTransaction(transaction);
+ }
+
+ }
+
+ public Iterable<Flight> getFlights(TopiaContext transaction,
+ Campaign campaign,
+ Date beginDate,
+ Date endDate) {
+
+ Preconditions.checkNotNull(campaign);
+ Preconditions.checkNotNull(beginDate);
+ Preconditions.checkNotNull(endDate);
+
+ long start = TimeLog.getTime();
+
+ List<Flight> campaignFlights;
+ try {
+
+ FlightDAO dao = SammoaDAOHelper.getFlightDAO(transaction);
+
+ campaignFlights = dao.findAllByCampaign(campaign);
+ Collections.sort(campaignFlights, Flights.onDate());
+
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+
+ }
+
+ // Filter on period
+ final PeriodDates period = new PeriodDates(beginDate, endDate);
+ Iterable<Flight> result = Iterables.filter(campaignFlights, new Predicate<Flight>() {
+
+ @Override
+ public boolean apply(Flight input) {
+ return period.between(input.getBeginDate());
+ }
+ });
+
+ timeLog.log(start, "getFlights(" + campaign.getCode() + ")");
+
+ return result;
+ }
+
public Flight getFlight(String flightId) {
+ Preconditions.checkNotNull(flightId);
long start = TimeLog.getTime();
Flight result;
@@ -129,15 +189,15 @@
TopiaContext transaction = persistence.beginTransaction();
try {
FlightDAO dao = SammoaDAOHelper.getFlightDAO(transaction);
-
+
result = dao.findByTopiaId(flightId);
- Preconditions.checkArgument(result != null,
+ Preconditions.checkArgument(result != null,
String.format("%s doesn't exist", flightId));
if (logger.isInfoEnabled()) {
- logger.info(String.format("Loading flight %d [%s]",
- result.getFlightNumber(),
- result.getTopiaId())
+ logger.info("Loading flight {} [{}]",
+ result.getFlightNumber(),
+ result.getTopiaId()
);
}
@@ -173,7 +233,7 @@
TopiaContext transaction = persistence.beginTransaction();
try {
FlightDAO dao = SammoaDAOHelper.getFlightDAO(transaction);
-
+
String systemId = config.getSystemId();
int startNumber = config.getFlightNumber();
@@ -181,11 +241,11 @@
result = dao.createByNaturalId(systemId, flightNumber, campaign);
result.setPlatformType(PlatformType.SIMPLE);
-
+
if (logger.isInfoEnabled()) {
- logger.info(String.format("Create new flight %d for campaign %s",
- flightNumber,
- campaign.getCode())
+ logger.info("Create new flight {} for campaign {}",
+ flightNumber,
+ campaign.getCode()
);
}
@@ -207,8 +267,8 @@
*
* @param flight Flight where observers are retrieved
* @return the List of allowed Observer
+ * @see ObserverPosition
* @since 0.3
- * @see ObserverPosition
*/
public List<Observer> getFlightObserverForPositions(Flight flight) {
@@ -228,10 +288,22 @@
public List<GeoPoint> getFlightGeoPoints(Flight flight) {
- List<GeoPoint> result;
TopiaContext transaction = persistence.beginTransaction();
try {
+ List<GeoPoint> result = getFlightGeoPoints(transaction, flight);
+ return result;
+ } finally {
+ persistence.endTransaction(transaction);
+ }
+
+ }
+
+ public List<GeoPoint> getFlightGeoPoints(TopiaContext transaction, Flight flight) {
+
+ List<GeoPoint> result;
+
+ try {
GeoPointDAO dao = SammoaDAOHelper.getGeoPointDAO(transaction);
result = dao.findAllByFlightOrderedByRecordTime(flight);
@@ -239,8 +311,6 @@
} catch (TopiaException e) {
throw new TopiaRuntimeException(e);
- } finally {
- persistence.endTransaction(transaction);
}
return result;
}
@@ -288,7 +358,7 @@
* necessary. Note that all {@link TransectFlight} have link with
* {@link AutoSaveListener} to manage modifications.
*
- * @param flight The flight
+ * @param flight The flight
* @param fromIndex Index where transects will be added
* @param transects The list of transect to add
* @return the resulting TransectFlight added
@@ -296,7 +366,7 @@
public List<TransectFlight> addTransects(Flight flight, int fromIndex, Iterable<Transect> transects) {
List<TransectFlight> result = Lists.newArrayList();
-
+
TopiaContext transaction = persistence.beginTransaction();
try {
@@ -312,7 +382,7 @@
// referential.persistTransectIfNecessary(transaction, transect);
TransectFlight transectFlight = createTransectFlight(
- transaction, transect, flight);
+ transaction, transect, flight);
logger.debug("Add transect {} to the flight {}",
transect.getName(), flight.getFlightNumber());
@@ -333,7 +403,7 @@
Collections.reverse(result);
return result;
}
-
+
public Map<Transect, Long> getTransectRealNbTimes(Collection<Transect> transects) {
Map<Transect, Long> result;
@@ -366,20 +436,35 @@
*/
public List<Route> getRoutes(Flight flight) {
- List<Route> result;
TopiaContext transaction = persistence.beginTransaction();
try {
+ List<Route> result = getRoutes(transaction, flight);
+ return result;
+ } finally {
+ persistence.endTransaction(transaction);
+ }
+ }
+
+ /**
+ * Retrieve the list of {@link Route} associated to the given {@code flight}.
+ *
+ * @param flight Flight
+ * @return the List of Route matching the {@code flight}
+ */
+ public List<Route> getRoutes(TopiaContext transaction, Flight flight) {
+
+ List<Route> result;
+ try {
+
RouteDAO dao = SammoaDAOHelper.getRouteDAO(transaction);
result = dao.findAllByFlightOrderedByBeginTime(flight);
} catch (TopiaException e) {
throw new TopiaRuntimeException(e);
+ }
- } finally {
- persistence.endTransaction(transaction);
- }
return result;
}
@@ -407,7 +492,7 @@
}
return result;
}
-
+
public TransectFlight getLastTransectDone(Flight flight) {
TransectFlight result;
@@ -416,7 +501,7 @@
RouteDAO dao = SammoaDAOHelper.getRouteDAO(transaction);
- Route route = dao.findLastByFlightAndType(flight, RouteType.LEG);
+ Route route = dao.findLastByFlightAndType(flight, RouteType.LEG);
if (route != null) {
result = route.getTransectFlight();
@@ -436,10 +521,20 @@
public List<Observation> getObservations(Flight flight) {
- List<Observation> result;
TopiaContext transaction = persistence.beginTransaction();
try {
+ List<Observation> result = getObservations(transaction, flight);
+ return result;
+ } finally {
+ persistence.endTransaction(transaction);
+ }
+ }
+ public List<Observation> getObservations(TopiaContext transaction, Flight flight) {
+
+ List<Observation> result;
+ try {
+
ObservationDAO dao = SammoaDAOHelper.getObservationDAO(transaction);
result = dao.findAllByFlightOrderedByObservationTime(flight);
@@ -447,12 +542,10 @@
} catch (TopiaException e) {
throw new TopiaRuntimeException(e);
- } finally {
- persistence.endTransaction(transaction);
}
return result;
}
-
+
public void setRouteObserverByPosition(Route route,
Observer observer,
Position position) {
@@ -463,7 +556,7 @@
ObserverPositionDAO observerPositionDAO =
SammoaDAOHelper.getObserverPositionDAO(transaction);
-
+
ObserverPosition observerPosition =
Iterables.find(observerPositions, ObserverPositions.withPosition(position));
@@ -489,12 +582,12 @@
}
}
}
-
+
observerPosition.setObserver(observer);
observerPositionDAO.update(observerPosition);
debugObserverPositions("Update", observerPositions);
-
+
transaction.commitTransaction();
} catch (TopiaException e) {
@@ -567,18 +660,18 @@
Route previousRoute,
TransectFlight transectFlight)
throws TopiaException {
-
+
Preconditions.checkArgument(transectFlight != null, "You can't create a leg without any transect");
Route result = createRoute(transaction, flight, beginTime, RouteType.LEG, previousRoute, transectFlight);
RouteDAO dao = SammoaDAOHelper.getRouteDAO(transaction);
-
+
result.setTransectFlight(transectFlight);
int effortNumber = dao.getLastEffortNumber(flight);
result.setEffortNumber(effortNumber);
-
+
return result;
}
@@ -588,7 +681,7 @@
Route previousRoute,
Observation circleBackCause)
throws TopiaException {
-
+
Preconditions.checkArgument(circleBackCause != null, "You can't create a route without any observation cause");
Route result = createRoute(transaction, flight, beginTime, RouteType.CIRCLE_BACK, previousRoute, null);
@@ -626,21 +719,21 @@
}
// Prepare observer positions
- Collection<ObserverPosition> observerPositions =
+ Collection<ObserverPosition> observerPositions =
createRouteObserverPositions(transaction, previousRoute, transectFlight, flight);
result.setObserverPosition(observerPositions);
return result;
}
-
+
protected Collection<ObserverPosition> createRouteObserverPositions(TopiaContext transaction,
Route previousRoute,
TransectFlight transectFlight,
- Flight flight)
+ Flight flight)
throws TopiaException {
-
+
Collection<ObserverPosition> result;
-
+
if (previousRoute != null) {
// Prepare position depends on transect change
@@ -662,20 +755,20 @@
}
result = copyObserverPositions(transaction, previousRoute.getObserverPosition());
- }
- } else {
+ }
+ } else {
if (logger.isDebugEnabled()) {
logger.debug("Create default observerPositions from flight");
}
result = createObserverPositions(transaction, flight);
- }
- return result;
+ }
+ return result;
}
- protected Collection<ObserverPosition> createObserverPositions(TopiaContext transaction,
- Flight flight)
+ protected Collection<ObserverPosition> createObserverPositions(TopiaContext transaction,
+ Flight flight)
throws TopiaException {
Collection<ObserverPosition> result = Lists.newArrayList();
@@ -712,10 +805,10 @@
}
debugObserverPositions("Create", result);
-
+
return result;
}
-
+
protected Collection<ObserverPosition> copyObserverPositions(TopiaContext transaction,
Collection<ObserverPosition> observerPositions)
throws TopiaException {
@@ -723,10 +816,10 @@
Collection<ObserverPosition> result = Lists.newArrayList();
debugObserverPositions("Copy", observerPositions);
-
+
ObserverPositionDAO observerPositionDAO =
SammoaDAOHelper.getObserverPositionDAO(transaction);
-
+
for (ObserverPosition source : observerPositions) {
ObserverPosition target = observerPositionDAO.create();
@@ -736,10 +829,10 @@
}
debugObserverPositions("Result of copy", result);
-
- return result;
+
+ return result;
}
-
+
protected void debugObserverPositions(String title, Iterable<ObserverPosition> observerPositions) {
if (logger.isTraceEnabled()) {
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java 2012-08-09 17:26:32 UTC (rev 380)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java 2012-08-09 17:53:27 UTC (rev 381)
@@ -30,17 +30,28 @@
import com.bbn.openmap.omGraphics.OMGraphic;
import com.bbn.openmap.omGraphics.OMPoint;
import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
+import fr.ulr.sammoa.application.FlightService;
import fr.ulr.sammoa.application.SammoaConfig;
import fr.ulr.sammoa.application.SammoaContext;
import fr.ulr.sammoa.persistence.Campaign;
import fr.ulr.sammoa.persistence.Flight;
import fr.ulr.sammoa.persistence.GeoPoint;
+import fr.ulr.sammoa.persistence.GeoPoints;
+import fr.ulr.sammoa.persistence.Observation;
+import fr.ulr.sammoa.persistence.Observations;
+import fr.ulr.sammoa.persistence.ObserverPosition;
+import fr.ulr.sammoa.persistence.Position;
import fr.ulr.sammoa.persistence.Region;
+import fr.ulr.sammoa.persistence.Route;
+import fr.ulr.sammoa.persistence.RouteType;
+import fr.ulr.sammoa.persistence.Routes;
import fr.ulr.sammoa.persistence.SammoaPersistence;
-import org.nuiton.util.PeriodDates;
+import fr.ulr.sammoa.persistence.Species;
+import fr.ulr.sammoa.persistence.Strate;
+import fr.ulr.sammoa.persistence.Transect;
+import fr.ulr.sammoa.persistence.TransectFlight;
+import org.nuiton.topia.TopiaContext;
import org.nuiton.util.TimeLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,6 +59,8 @@
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -89,15 +102,14 @@
dataModel.getExportDirectory(),
dataModel.getExportFilename());
}
+
long startTime = TimeLog.getTime();
- Campaign campaign = dataModel.getCampaign();
- Region region = campaign.getRegion();
// * uniquement pour un parcours de type LEG, sinon la cellule sera vide
// ** uniquement pour un parcours de type CIRCLE_BACK, sinon la cellule sera vide
DbfTableModelBuilder builder = new DbfTableModelBuilder()
- .stringColumn("REGION") // (campaign.region.code)
+ .stringColumn("REGION") // (region.code)
.stringColumn("CAMPAIGN") // (campaign.code)
.integerColumn("SECTOR") // * (route.transectFlight.transect.strate.sector.sectorNumber)
.stringColumn("STRATE_TYPE") // * (route.transectFlight.transect.strate.strateType.code)
@@ -107,9 +119,9 @@
.integerColumn("FLIGHT") // (route.flight.flightNumber)
.stringColumn("COMPUTER") // (route.flight.systemId)
.stringColumn("ROUTE_TYPE") // (route.routeType.name)
- .stringColumn("EFFORT_GROUP") // * ()
- .stringColumn("EFFORT") // * ()
- .stringColumn("STATUS") // * (LegStatus.name)
+ .stringColumn("EFFORT_GROUP") // * (voir doc)
+ .stringColumn("EFFORT") // * (voir doc)
+ .stringColumn("STATUS") // * (voir doc)
.dateColumn("DATE") // (route.beginTime)
.stringColumn("HHMMSS") // (format(route.beginTime, "HHmmss"))
.integerColumn("SEA_STATE") // (route.seaState)
@@ -133,73 +145,160 @@
.doubleColumn("SPEED", 19, 11) // (geoPoint.speed)
.doubleColumn("ALTITUDE", 19, 11) // (geoPoint.altitude)
.stringColumn("GPS_TIME") // (format(geoPoint.recordTime, "HHmmss"))
- .stringColumn("AIRCRAFT") // (route.flight.planeImmatriculation)
+ .stringColumn("AIRCRAFT") // (route.flight.immatriculation)
.stringColumn("COMMENT") // (route.comment)
.build();
EsriGraphicList graphicList = new EsriPointList();
- List<Flight> campaignFlights = context.getFlightService().getFlights(dataModel.getCampaign());
- // Filter on period
- final PeriodDates period = new PeriodDates(dataModel.getBeginDate(), dataModel.getEndDate());
- Iterable<Flight> flights = Iterables.filter(campaignFlights, new Predicate<Flight>() {
+ FlightService flightService = context.getFlightService();
- @Override
- public boolean apply(Flight input) {
- return period.between(input.getBeginDate());
- }
- });
+ Campaign campaign = dataModel.getCampaign();
+ Region region = campaign.getRegion();
- // Export for each flight
- for (Flight flight : flights) {
+ List<RouteType> routeTypes = dataModel.getRouteTypes();
+ List<Strate> strates = dataModel.getStrates();
- if (logger.isInfoEnabled()) {
- logger.info("Export GeoPoints from flight {} - {} - {} - {}",
- new Object[]{flight.getFlightNumber(),
- flight.getSystemId(),
- campaign.getCode(),
- region.getCode()}
- );
- }
+ TopiaContext tx = context.getPersistence().beginTransaction();
- List<GeoPoint> geoPoints = context.getFlightService().getFlightGeoPoints(flight);
+ try {
+ // get flights for campaign (and between begin - end date)
+ Iterable<Flight> flights = flightService.getFlights(
+ tx,
+ campaign,
+ dataModel.getBeginDate(),
+ dataModel.getEndDate());
- // One record by GeoPoint
- for (GeoPoint geoPoint : geoPoints) {
+ // Export for each flight
+ for (Flight flight : flights) {
- Map<String, Object> record = Maps.newHashMap();
+ if (logger.isInfoEnabled()) {
+ logger.info("Export Efforts from flight {} - {} - {} - {}",
+ new Object[]{flight.getFlightNumber(),
+ flight.getSystemId(),
+ campaign.getCode(),
+ region.getCode()}
+ );
+ }
- record.put("REGION", region.getCode());
- record.put("CAMPAIGN", campaign.getCode());
- record.put("FLIGHT", flight.getFlightNumber());
- record.put("COMPUTER", flight.getSystemId());
- record.put("DATE", geoPoint.getRecordTime());
- record.put("HHMMSS", timeFormat.format(geoPoint.getRecordTime()));
- record.put("LAT", geoPoint.getLatitude());
- record.put("LON", geoPoint.getLongitude());
- record.put("SPEED", geoPoint.getSpeed());
- record.put("ALTITUDE", geoPoint.getAltitude());
+ // common properties for the flight
+ Map<String, Object> commonRecord = Maps.newHashMap();
+ fillFlightRecord(campaign, region, flight, commonRecord);
- builder.addValues(record);
+ // get all routes of this flight
+ List<Route> routes = flightService.getRoutes(tx, flight);
- if (logger.isTraceEnabled()) {
- logger.trace("Record={}", record);
+ // get all geo points for this flight
+ List<GeoPoint> geoPoints = flightService.getFlightGeoPoints(tx, flight);
+
+ // get best geo points for each route
+ Iterable<GeoPoint> routeGeoPoints =
+ GeoPoints.getClosestPoints(geoPoints, Routes.toDates(routes));
+
+ // to iterate on geoPoints
+ Iterator<GeoPoint> geoPointIterator = routeGeoPoints.iterator();
+
+ // to keep current effort group identifier
+ String effortGroup = null;
+
+ for (Route route : routes) {
+
+ if (logger.isTraceEnabled()) {
+ logger.trace("Export Efforts from route {} - {}",
+ new Object[]{route.getBeginTime(),
+ route.getRouteType()}
+ );
+ }
+
+ // get geoPoint associated with this route
+ GeoPoint geoPoint = geoPointIterator.next();
+
+ // is current route a leg ?
+ boolean routeIsLeg = Routes.isRouteLeg(route);
+
+ if (!routeIsLeg) {
+
+ if (effortGroup != null) {
+
+ // previous route was a leg
+ // need to create a end row (to close the group)
+
+ Map<String, Object> record = Maps.newHashMap();
+ record.putAll(commonRecord);
+
+ // add route data
+ fillRouteRecord(flight,
+ route,
+ effortGroup,
+ LegStatus.END,
+ record);
+
+ // add geoPoint data and flush
+ fillGeoPointRecordAndFlush(geoPoint,
+ record,
+ builder,
+ graphicList);
+ }
+
+ // reset effort group
+ // will be recomputed by first next leg route
+ effortGroup = null;
+ }
+
+ boolean routeIsValid = Routes.isRouteAccepted(route,
+ routeTypes,
+ strates);
+
+ if (routeIsValid) {
+
+ // selected route = one row on dbf
+
+ Map<String, Object> record = Maps.newHashMap();
+ record.putAll(commonRecord);
+
+ LegStatus legStatus = null;
+
+ if (routeIsLeg) {
+
+ if (effortGroup == null) {
+
+ // this is the first route of the leg group
+ legStatus = LegStatus.BEGIN;
+
+ // compute the unique effortGroup for this group
+ effortGroup = computeEffortGroup(flight, route);
+ } else {
+
+ // group already began, just add a route to it
+ legStatus = LegStatus.ADD;
+ }
+
+ }
+
+ // add route data
+ fillRouteRecord(flight, route, effortGroup, legStatus, record);
+
+
+ // add geoPoint data and flush
+ fillGeoPointRecordAndFlush(geoPoint,
+ record,
+ builder,
+ graphicList);
+ }
}
-
- OMGraphic graphic = new OMPoint(geoPoint.getLatitude(), geoPoint.getLongitude());
- graphicList.add(graphic);
}
- }
- startTime = timeLog.log(startTime, "exportGeoPointsMap", "after building EsriGraphicList and DbfTableModel");
+ startTime = timeLog.log(
+ startTime,
+ "exportEffortsMap",
+ "after building EsriGraphicList and DbfTableModel");
- // Execute export with EsriShapeExport
- DbfTableModel tableModel = builder.getModel();
- String pathFile = new File(dataModel.getExportDirectory(), dataModel.getExportFilename()).getAbsolutePath();
- EsriShapeExport shapeExport = new EsriShapeExport(graphicList, tableModel, pathFile);
- shapeExport.export();
+ flushExport(builder, dataModel, graphicList);
- timeLog.log(startTime, "exportEffortsMap", "after EsriShapeExport execution");
+ timeLog.log(startTime, "exportEffortsMap", "after EsriShapeExport execution");
+ } finally {
+ context.getPersistence().endTransaction(tx);
+ }
}
public void exportObservationsMap(ExportMapModel dataModel) {
@@ -214,11 +313,7 @@
}
long startTime = TimeLog.getTime();
- Campaign campaign = dataModel.getCampaign();
- Region region = campaign.getRegion();
-
// * uniquement pour un parcours de type LEG, sinon la cellule sera vide
- // ** uniquement pour un parcours de type CIRCLE_BACK, sinon la cellule sera vide
DbfTableModelBuilder builder = new DbfTableModelBuilder()
.stringColumn("REGION") // (campaign.region.code)
.stringColumn("CAMPAIGN") // (campaign.code)
@@ -230,9 +325,9 @@
.integerColumn("FLIGHT") // (route.flight.flightNumber)
.stringColumn("COMPUTER") // (route.flight.systemId)
.stringColumn("ROUTE_TYPE") // (route.routeType.name)
- .stringColumn("EFFORT_GROUP") // * ()
- .stringColumn("EFFORT") // * ()
- .stringColumn("OBSERVATION") // ()
+ .stringColumn("EFFORT_GROUP") // * (voir doc)
+ .stringColumn("EFFORT") // * (voir doc)
+ .stringColumn("OBSERVATION") // (voir doc)
.dateColumn("DATE") // (observation.beginTime)
.stringColumn("HHMMSS") // (format(observation.beginTime, "HHmmss"))
.stringColumn("TAXON") // (observation.species.type)
@@ -248,7 +343,7 @@
.stringColumn("BEHAVIOUR") // (observation.behaviour)
.integerColumn("SWIM_DIR") // (observation.swimDir)
.stringColumn("CALVES") // (observation.calves)
- .stringColumn("PHOTO") // (observation.photo)
+ .booleanColumn("PHOTO") // (observation.photo)
.stringColumn("OBSERVER") // (observation.observerPosition.observer.initials)
.stringColumn("SIDE") // (observation.observerPosition.observer.position.name)
.stringColumn("STATUS") // (observation.observationStatus.name)
@@ -258,77 +353,179 @@
.doubleColumn("SPEED", 19, 11) // (geoPoint.speed)
.doubleColumn("ALTITUDE", 19, 11) // (geoPoint.altitude)
.stringColumn("GPS_TIME") // (format(geoPoint.recordTime, "HHmmss"))
- .stringColumn("AIRCRAFT") // (observation.flight.planeImmatriculation)
+ .stringColumn("AIRCRAFT") // (flight.immatriculation)
.stringColumn("COMMENT") // (observation.comment)
.build();
EsriGraphicList graphicList = new EsriPointList();
- List<Flight> campaignFlights = context.getFlightService().getFlights(dataModel.getCampaign());
- // Filter on period
- final PeriodDates period = new PeriodDates(dataModel.getBeginDate(), dataModel.getEndDate());
- Iterable<Flight> flights = Iterables.filter(campaignFlights, new Predicate<Flight>() {
+ Campaign campaign = dataModel.getCampaign();
+ Region region = campaign.getRegion();
+ List<RouteType> routeTypes = dataModel.getRouteTypes();
+ List<Strate> strates = dataModel.getStrates();
- @Override
- public boolean apply(Flight input) {
- return period.between(input.getBeginDate());
- }
- });
+ TopiaContext tx = context.getPersistence().beginTransaction();
- // Export for each flight
+ try {
+ FlightService flightService = context.getFlightService();
- for (Flight flight : flights) {
+ // get flights for campaign (and between begin - end date)
+ Iterable<Flight> flights = flightService.getFlights(
+ tx,
+ campaign,
+ dataModel.getBeginDate(),
+ dataModel.getEndDate());
- if (logger.isInfoEnabled()) {
- logger.info("Export GeoPoints from flight {} - {} - {} - {}",
- new Object[]{flight.getFlightNumber(),
- flight.getSystemId(),
- campaign.getCode(),
- region.getCode()}
- );
- }
+ // Export for each flight
- List<GeoPoint> geoPoints = context.getFlightService().getFlightGeoPoints(flight);
+ for (Flight flight : flights) {
- // One record by GeoPoint
- for (GeoPoint geoPoint : geoPoints) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Export Observations from flight {} - {} - {} - {}",
+ new Object[]{flight.getFlightNumber(),
+ flight.getSystemId(),
+ campaign.getCode(),
+ region.getCode()}
+ );
+ }
- Map<String, Object> record = Maps.newHashMap();
+ // get all observations for this flight
+ List<Observation> observations =
+ flightService.getObservations(tx, flight);
- record.put("REGION", region.getCode());
- record.put("CAMPAIGN", campaign.getCode());
- record.put("FLIGHT", flight.getFlightNumber());
- record.put("COMPUTER", flight.getSystemId());
- record.put("DATE", geoPoint.getRecordTime());
- record.put("HHMMSS", timeFormat.format(geoPoint.getRecordTime()));
- record.put("LAT", geoPoint.getLatitude());
- record.put("LON", geoPoint.getLongitude());
- record.put("SPEED", geoPoint.getSpeed());
- record.put("ALTITUDE", geoPoint.getAltitude());
+ // apply species filter
+ Observations.removeOtherSpecies(observations,
+ dataModel.getSpecies());
- builder.addValues(record);
+ // get all routes of this flight
+ List<Route> routes = flightService.getRoutes(tx, flight);
- if (logger.isTraceEnabled()) {
- logger.trace("Record={}", record);
+ // get all geo points for this flight
+ List<GeoPoint> routeGeoPoints =
+ flightService.getFlightGeoPoints(tx, flight);
+
+ Map<String, Object> flightRecord = Maps.newHashMap();
+ fillFlightRecord(campaign, region, flight, flightRecord);
+
+ int nextRouteIndex = 0;
+ int nbRoutes = routes.size();
+ String effortGroup = null;
+
+ for (Route route : routes) {
+
+ nextRouteIndex++;
+
+ boolean routeIsLeg = Routes.isRouteLeg(route);
+
+ if (!routeIsLeg) {
+
+ // new group will be computed at next leg route
+ effortGroup = null;
+ }
+
+ if (!Routes.isRouteAccepted(route, routeTypes, strates)) {
+
+ // not selected route
+ continue;
+ }
+
+ Map<String, Object> routeRecord = Maps.newHashMap();
+ routeRecord.putAll(flightRecord);
+
+ if (routeIsLeg && effortGroup == null) {
+
+ // compute effort group id
+ effortGroup = computeEffortGroup(flight, route);
+ }
+
+ fillRouteTypeRecord(flight, route, effortGroup, routeRecord);
+
+ // get routeEndTime
+ Date routeEndTime;
+
+ if (nextRouteIndex < nbRoutes) {
+
+ // use next route begin time
+ Route nextRoute = routes.get(nextRouteIndex);
+ routeEndTime = nextRoute.getBeginTime();
+ } else {
+
+ // use flight end date
+ routeEndTime = flight.getEndDate();
+ }
+
+ // Get observations for this route
+ List<Observation> routeObservations =
+ Observations.getObservations(observations,
+ route.getBeginTime(),
+ routeEndTime);
+
+ // get best geo points for each observation
+ Iterable<GeoPoint> observationGeoPoints =
+ GeoPoints.getClosestPoints(
+ routeGeoPoints,
+ Observations.toDates(routeObservations));
+
+ // to iterate on geoPoints
+ Iterator<GeoPoint> geoPointIterator =
+ observationGeoPoints.iterator();
+
+ for (Observation observation : routeObservations) {
+
+ Map<String, Object> record = Maps.newHashMap();
+ record.putAll(routeRecord);
+
+ String observationId = computeObservationId(flight, observation);
+ record.put("OBSERVATION", observationId);
+
+ fillDateRecord(observation.getObservationTime(), record);
+
+ Species species = observation.getSpecies();
+ if (species != null) {
+ record.put("TAXON", species.getType());
+ record.put("GROUP", species.getGroupName());
+ record.put("FAMILY", species.getFamily());
+ record.put("SPECIES", species.getCode());
+ record.put("SPECIES_NAME", species.getCommonName());
+ record.put("SPECIES_LATIN", species.getLatinName());
+ }
+ record.put("POD_SIZE", observation.getPodSize());
+ record.put("AGE", observation.getAge());
+ record.put("DEC_ANGLE", observation.getDecAngle());
+ record.put("CUE", observation.getCue());
+ record.put("BEHAVIOUR", observation.getBehaviour());
+ record.put("SWIM_DIR", observation.getSwimDir());
+ record.put("CALVES", observation.getCalves());
+ record.put("PHOTO", observation.isPhoto());
+ record.put("OBSERVER", observation.getObserverPosition().getObserver().getInitials());
+ record.put("SIDE", observation.getObserverPosition().getPosition().getName());
+ record.put("STATUS", observation.getObservationStatus().getName());
+ record.put("COMMENT", observation.getComment());
+
+ GeoPoint geoPoint = geoPointIterator.next();
+
+ // add geoPoint data and flush
+ fillGeoPointRecordAndFlush(geoPoint,
+ record,
+ builder,
+ graphicList);
+
+ }
}
-
- OMGraphic graphic = new OMPoint(geoPoint.getLatitude(), geoPoint.getLongitude());
- graphicList.add(graphic);
}
- }
- startTime = timeLog.log(startTime, "exportObservationsMap", "after building EsriGraphicList and DbfTableModel");
+ startTime = timeLog.log(startTime, "exportObservationsMap", "after building EsriGraphicList and DbfTableModel");
- // Execute export with EsriShapeExport
- DbfTableModel tableModel = builder.getModel();
- String pathFile = new File(dataModel.getExportDirectory(), dataModel.getExportFilename()).getAbsolutePath();
- EsriShapeExport shapeExport = new EsriShapeExport(graphicList, tableModel, pathFile);
- shapeExport.export();
+ flushExport(builder, dataModel, graphicList);
- timeLog.log(startTime, "exportObservationsMap", "after EsriShapeExport execution");
+ timeLog.log(startTime, "exportObservationsMap", "after EsriShapeExport execution");
+ } finally {
+ context.getPersistence().endTransaction(tx);
+ }
}
public void exportGeoPointsMap(ExportMapModel dataModel) {
+
Preconditions.checkNotNull(dataModel.getCampaign());
Preconditions.checkNotNull(dataModel.getBeginDate());
Preconditions.checkNotNull(dataModel.getEndDate());
@@ -341,14 +538,12 @@
long startTime = TimeLog.getTime();
- Campaign campaign = dataModel.getCampaign();
- Region region = campaign.getRegion();
-
DbfTableModelBuilder builder = new DbfTableModelBuilder()
.stringColumn("REGION")
.stringColumn("CAMPAIGN")
.integerColumn("FLIGHT")
.stringColumn("COMPUTER")
+ .stringColumn("AIRCRAFT")
.dateColumn("DATE")
.stringColumn("HHMMSS")
.doubleColumn("LAT", 19, 11)
@@ -357,68 +552,214 @@
.doubleColumn("ALTITUDE", 19, 11)
.build();
- EsriGraphicList graphicList = new EsriPointList();
- List<Flight> campaignFlights = context.getFlightService().getFlights(dataModel.getCampaign());
+ Campaign campaign = dataModel.getCampaign();
+ Region region = campaign.getRegion();
- // Filter on period
- final PeriodDates period = new PeriodDates(dataModel.getBeginDate(), dataModel.getEndDate());
- Iterable<Flight> flights = Iterables.filter(campaignFlights, new Predicate<Flight>() {
+ FlightService flightService = context.getFlightService();
- @Override
- public boolean apply(Flight input) {
- return period.between(input.getBeginDate());
- }
- });
+ // get flights for campaign (and between begin - end date)
+ Iterable<Flight> flights = flightService.getFlights(campaign,
+ dataModel.getBeginDate(),
+ dataModel.getEndDate());
+ EsriGraphicList graphicList = new EsriPointList();
+
// Export for each flight
for (Flight flight : flights) {
if (logger.isInfoEnabled()) {
- logger.info(String.format("Export GeoPoints from flight %d - %s - %s - %s",
- flight.getFlightNumber(),
- flight.getSystemId(),
- campaign.getCode(),
- region.getCode())
+ logger.info("Export GeoPoints from flight {} - {} - {} - {}",
+ new Object[]{flight.getFlightNumber(),
+ flight.getSystemId(),
+ campaign.getCode(),
+ region.getCode()}
);
}
- List<GeoPoint> geoPoints = context.getFlightService().getFlightGeoPoints(flight);
+ List<GeoPoint> geoPoints =
+ flightService.getFlightGeoPoints(flight);
+ Map<String, Object> commonRecord = Maps.newHashMap();
+ fillFlightRecord(campaign, region, flight, commonRecord);
+
// One record by GeoPoint
for (GeoPoint geoPoint : geoPoints) {
Map<String, Object> record = Maps.newHashMap();
+ record.putAll(commonRecord);
- record.put("REGION", region.getCode());
- record.put("CAMPAIGN", campaign.getCode());
- record.put("FLIGHT", flight.getFlightNumber());
- record.put("COMPUTER", flight.getSystemId());
- record.put("DATE", geoPoint.getRecordTime());
- record.put("HHMMSS", timeFormat.format(geoPoint.getRecordTime()));
- record.put("LAT", geoPoint.getLatitude());
- record.put("LON", geoPoint.getLongitude());
- record.put("SPEED", geoPoint.getSpeed());
- record.put("ALTITUDE", geoPoint.getAltitude());
+ fillDateRecord(geoPoint.getRecordTime(), record);
- builder.addValues(record);
-
- if (logger.isTraceEnabled()) {
- logger.trace("Record={}", record);
- }
-
- OMGraphic graphic = new OMPoint(geoPoint.getLatitude(), geoPoint.getLongitude());
- graphicList.add(graphic);
+ // add geoPoint data and flush
+ fillGeoPointRecordAndFlush(geoPoint,
+ record,
+ builder,
+ graphicList);
}
}
- startTime = timeLog.log(startTime, "exportGeoPointsMap", "after building EsriGraphicList and DbfTableModel");
+ startTime = timeLog.log(startTime, "exportGeoPointsMap",
+ "after building EsriGraphicList and DbfTableModel");
- // Execute export with EsriShapeExport
+ flushExport(builder, dataModel, graphicList);
+
+ timeLog.log(startTime, "exportGeoPointsMap",
+ "after EsriShapeExport execution");
+ }
+
+ protected void flushExport(DbfTableModelBuilder builder,
+ ExportMapModel dataModel,
+ EsriGraphicList graphicList) {
+
DbfTableModel tableModel = builder.getModel();
- String pathFile = new File(dataModel.getExportDirectory(), dataModel.getExportFilename()).getAbsolutePath();
+ String pathFile = new File(dataModel.getExportDirectory(),
+ dataModel.getExportFilename()).getAbsolutePath();
EsriShapeExport shapeExport = new EsriShapeExport(graphicList, tableModel, pathFile);
shapeExport.export();
+ }
- timeLog.log(startTime, "exportGeoPointsMap", "after EsriShapeExport execution");
+ protected void fillDateRecord(Date date, Map<String, Object> record) {
+ record.put("DATE", date);
+ record.put("HHMMSS", timeFormat.format(date));
}
+
+ protected void fillGeoPointRecordAndFlush(GeoPoint geoPoint,
+ Map<String, Object> record,
+ DbfTableModelBuilder builder,
+ EsriGraphicList graphicList) {
+
+ record.put("LAT", geoPoint.getLatitude());
+ record.put("LON", geoPoint.getLongitude());
+ record.put("SPEED", geoPoint.getSpeed());
+ record.put("ALTITUDE", geoPoint.getAltitude());
+
+ builder.addValues(record);
+
+ if (logger.isTraceEnabled()) {
+ logger.trace("Record={}", record);
+ }
+
+ OMGraphic graphic = new OMPoint(geoPoint.getLatitude(),
+ geoPoint.getLongitude());
+ graphicList.add(graphic);
+ }
+
+ protected void fillFlightRecord(Campaign campaign,
+ Region region,
+ Flight flight,
+ Map<String, Object> record) {
+
+ record.put("REGION", region.getCode());
+ record.put("CAMPAIGN", campaign.getCode());
+ record.put("FLIGHT", flight.getFlightNumber());
+ record.put("AIRCRAFT", flight.getImmatriculation());
+ record.put("COMPUTER", flight.getSystemId());
+ }
+
+ protected void fillRouteRecord(Flight flight,
+ Route route,
+ String effortGroup,
+ LegStatus legStatus,
+ Map<String, Object> record) {
+
+ if (logger.isTraceEnabled()) {
+ logger.trace("Create Route record for route {} - {}",
+ new Object[]{route.getBeginTime(),
+ route.getRouteType()}
+ );
+ }
+
+ fillDateRecord(route.getBeginTime(), record);
+ fillRouteTypeRecord(flight, route, effortGroup, record);
+
+ if (legStatus != null) {
+ record.put("STATUS", LegStatus.END);
+ }
+ record.put("COMMENT", route.getComment());
+ record.put("SEA_STATE", route.getSeaState());
+ record.put("SWELL", route.getSwell());
+ record.put("TURBIDITY", route.getTurbidity());
+ record.put("SKY_GLINT", route.getSkyGlint());
+ record.put("GLARE_FROM", route.getGlareFrom());
+ record.put("GLARE_TO", route.getGlareTo());
+ record.put("GLARE_SEVERITY", route.getGlareSeverity());
+ record.put("GLARE_UNDER", route.isGlareUnder());
+ record.put("CLOUD_COVER", route.getCloudCover());
+ record.put("SUBJECTIVE", route.getSubjectiveConditions());
+ record.put("UNEXP_LEFT", route.getUnexpectedLeft());
+ record.put("UNEXP_RIGHT", route.getUnexpectedRight());
+
+ ObserverPosition observerPositionByPosition =
+ route.getObserverPositionByPosition(Position.FRONT_LEFT);
+ if (observerPositionByPosition != null) {
+ record.put("LEFT_REAR", observerPositionByPosition.getObserver().getInitials());
+ }
+ observerPositionByPosition =
+ route.getObserverPositionByPosition(Position.FRONT_RIGHT);
+ if (observerPositionByPosition != null) {
+ record.put("RIGHT_REAR", observerPositionByPosition.getObserver().getInitials());
+ }
+ observerPositionByPosition =
+ route.getObserverPositionByPosition(Position.NAVIGATOR);
+ if (observerPositionByPosition != null) {
+ record.put("CENTER", observerPositionByPosition.getObserver().getInitials());
+ }
+ }
+
+ protected void fillRouteTypeRecord(Flight flight,
+ Route route,
+ String effortGroup,
+ Map<String, Object> record) {
+
+ record.put("ROUTE_TYPE", route.getRouteType().getName());
+ if (Routes.isRouteLeg(route)) {
+ fillLegRouteRecord(route, effortGroup, record);
+ }
+
+ if (Routes.isRouteCircleBack(route)) {
+
+ // compute circle back cause
+ String circleBackCause = computeObservationId(flight, route.getCircleBackCause());
+ record.put("CB_CAUSE", circleBackCause);
+ }
+ }
+
+ protected void fillLegRouteRecord(Route route,
+ String effortGroup,
+ Map<String, Object> record) {
+
+ TransectFlight transectFlight = route.getTransectFlight();
+ Transect transect = transectFlight.getTransect();
+ Strate strate = transect.getStrate();
+
+ String effort = computeEffort(route);
+
+ record.put("SECTOR", strate.getSector().getSectorNumber());
+ record.put("STRATE_TYPE", strate.getStrateType().getCode());
+ record.put("STRATE", strate.getCode());
+ record.put("TRANSECT", transect.getName());
+ record.put("PASSAGE", transectFlight.getCrossingNumber());
+ record.put("EFFORT_GROUP", effortGroup);
+ record.put("EFFORT", effort);
+ }
+
+ protected String computeEffort(Route route) {
+ String result = "L" + route.getEffortNumber() + "-" +
+ route.getFlight().getFlightNumber() + "-" +
+ route.getFlight().getSystemId();
+ return result;
+ }
+
+ protected String computeEffortGroup(Flight flight, Route route) {
+ String result = "G" + route.getEffortNumber() + "-" +
+ flight.getFlightNumber() + "-" +
+ flight.getSystemId();
+ return result;
+ }
+
+ protected String computeObservationId(Flight flight, Observation observation) {
+ return "O" + observation.getObservationNumber() + "-" +
+ flight.getFlightNumber() + "-" +
+ flight.getSystemId();
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/LegStatus.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/LegStatus.java 2012-08-09 17:26:32 UTC (rev 380)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/LegStatus.java 2012-08-09 17:53:27 UTC (rev 381)
@@ -7,7 +7,7 @@
* @since 0.5
*/
public enum LegStatus {
- BEAGIN,
+ BEGIN,
ADD, END;
public String getName() {
Modified: trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java
===================================================================
--- trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java 2012-08-09 17:26:32 UTC (rev 380)
+++ trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java 2012-08-09 17:53:27 UTC (rev 381)
@@ -183,6 +183,7 @@
public Iterable<ImportableColumn<GeoPoint, Object>> getColumnsForImport() {
ModelBuilder builder = new ModelBuilder();
builder.newMandatoryColumn("REGION", "flight.campaign.region.code");
+ builder.newMandatoryColumn("AIRCRAFT", "flight.immatriculation");
builder.newMandatoryColumn("CAMPAIGN", "flight.campaign.code");
builder.newMandatoryColumn("FLIGHT", "flight.flightNumber", new DoubleToIntegerValueParser());
builder.newMandatoryColumn("COMPUTER", "flight.systemId");
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java 2012-08-09 17:26:32 UTC (rev 380)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java 2012-08-09 17:53:27 UTC (rev 381)
@@ -2,8 +2,8 @@
/*
* #%L
* SAMMOA :: Persistence
- * $Id:$
- * $HeadURL:$
+ * $Id$
+ * $HeadURL$
* %%
* Copyright (C) 2012 UMS 3462, Code Lutin
* %%
@@ -26,9 +26,15 @@
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import org.apache.commons.collections.CollectionUtils;
import org.nuiton.util.DateUtil;
+import org.nuiton.util.PeriodDates;
import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
/**
* Created: 16/07/12
@@ -36,15 +42,19 @@
* @author fdesbois <desbois(a)codelutin.com>
*/
public final class Observations {
-
+
private Observations() {
// static class do not have instanciation
}
+ public static Iterable<Date> toDates(Iterable<Observation> observations) {
+ return Iterables.transform(observations, toDate());
+ }
+
public static Function<Observation, Date> toDate() {
return TO_DATE_FUNCTION;
}
-
+
public static boolean inRoute(Observation observation, Route route, Route nextRoute) {
Date begin = route.getBeginTime();
@@ -59,6 +69,21 @@
return new ObservationInRoutePredicate(route, nextRoute);
}
+ public static void removeOtherSpecies(List<Observation> observations,
+ List<Species> species) {
+ if (CollectionUtils.isNotEmpty(species)) {
+
+ // filter by species
+ Iterator<Observation> itr = observations.iterator();
+ while (itr.hasNext()) {
+ Observation observation = itr.next();
+ if (!species.contains(observation.getSpecies())) {
+ itr.remove();
+ }
+ }
+ }
+ }
+
protected static Function<Observation, Date> TO_DATE_FUNCTION = new Function<Observation, Date>() {
@Override
@@ -66,11 +91,27 @@
return input.getObservationTime();
}
};
-
+
+ public static List<Observation> getObservations(List<Observation> observations,
+ Date beginTime,
+ Date endTime) {
+
+ PeriodDates periodDate = new PeriodDates(beginTime, endTime);
+
+ List<Observation> result = Lists.newArrayList();
+ for (Observation observation : observations) {
+ Date observationTime = observation.getObservationTime();
+ if (periodDate.between(observationTime)) {
+ result.add(observation);
+ }
+ }
+ return result;
+ }
+
protected static class ObservationInRoutePredicate implements Predicate<Observation> {
-
+
protected Route route;
-
+
protected Route nextRoute;
public ObservationInRoutePredicate(Route route, Route nextRoute) {
@@ -84,5 +125,5 @@
return Observations.inRoute(input, route, nextRoute);
}
}
-
+
}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-08-09 17:26:32 UTC (rev 380)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-08-09 17:53:27 UTC (rev 381)
@@ -2,8 +2,8 @@
/*
* #%L
* SAMMOA :: Persistence
- * $Id:$
- * $HeadURL:$
+ * $Id$
+ * $HeadURL$
* %%
* Copyright (C) 2012 UMS 3462, Code Lutin
* %%
@@ -23,8 +23,14 @@
* #L%
*/
+import com.google.common.base.Function;
import com.google.common.base.Objects;
+import com.google.common.collect.Iterables;
+import org.apache.commons.collections.CollectionUtils;
+import java.util.Date;
+import java.util.List;
+
/**
* Created: 16/07/12
*
@@ -36,6 +42,50 @@
// static class do not have instanciation
}
+ public static boolean isRouteLeg(Route route) {
+ return route != null && RouteType.LEG == route.getRouteType();
+ }
+
+ public static boolean isRouteCircleBack(Route route) {
+ return route != null && RouteType.CIRCLE_BACK == route.getRouteType();
+ }
+
+ public static Iterable<Date> toDates(Iterable<Route> routes) {
+ return Iterables.transform(routes, toDate());
+ }
+
+ public static boolean isRouteAccepted(Route route,
+ List<RouteType> routeTypes,
+ List<Strate> strates) {
+ boolean result = false;
+
+ if (CollectionUtils.isEmpty(routeTypes) ||
+ routeTypes.contains(route.getRouteType())) {
+
+ TransectFlight transectFlight = route.getTransectFlight();
+
+ if (CollectionUtils.isEmpty(strates) ||
+ transectFlight == null ||
+ strates.contains(transectFlight.getTransect().getStrate())) {
+ result = true;
+ }
+ }
+
+ return result;
+ }
+
+ public static Function<Route, Date> toDate() {
+ return TO_DATE_FUNCTION;
+ }
+
+ protected static Function<Route, Date> TO_DATE_FUNCTION = new Function<Route, Date>() {
+
+ @Override
+ public Date apply(Route input) {
+ return input.getBeginTime();
+ }
+ };
+
public static boolean equal(Route o1, Route o2) {
boolean result = Objects.equal(o1.getRouteType(), o2.getRouteType());
Modified: trunk/src/site/rst/import-export.rst
===================================================================
--- trunk/src/site/rst/import-export.rst 2012-08-09 17:26:32 UTC (rev 380)
+++ trunk/src/site/rst/import-export.rst 2012-08-09 17:53:27 UTC (rev 381)
@@ -172,6 +172,8 @@
geoPoint.flight.flightNumber
- COMPUTER : Identifiant du système
geoPoint.flight.systemId
+- AIRCRAFT : Immatriculation de l'avion
+ geoPoint.flight.planeImmatriculation
- DATE : Date d'enregistrement du poin
geoPoint.recordTime
- HHMMSS : Heure d'enregistrement du point
@@ -487,7 +489,7 @@
* observation.calves
-- PHOTO : Des photos ont été prises
+- PHOTO : Des photos ont été prises (L)
* observation.photo
1
0
r380 - trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence
by tchemit@users.forge.codelutin.com 09 Aug '12
by tchemit@users.forge.codelutin.com 09 Aug '12
09 Aug '12
Author: tchemit
Date: 2012-08-09 19:26:32 +0200 (Thu, 09 Aug 2012)
New Revision: 380
Url: http://forge.codelutin.com/repositories/revision/sammoa/380
Log:
improve code
Modified:
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/StringRefs.java
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/StringRefs.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/StringRefs.java 2012-08-09 13:50:53 UTC (rev 379)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/StringRefs.java 2012-08-09 17:26:32 UTC (rev 380)
@@ -24,7 +24,6 @@
*/
import com.google.common.base.Function;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import java.util.List;
@@ -40,14 +39,14 @@
public static List<StringRef> toRefs(List<String> strings) {
List<StringRef> result =
- Lists.newArrayList(Iterables.transform(strings, TO_STRING_REF_FUNCTION));
+ Lists.transform(strings, TO_STRING_REF_FUNCTION);
return result;
}
public static List<String> toStrings(List<StringRef> strings) {
List<String> result =
- Lists.newArrayList(Iterables.transform(strings, TO_STRING_FUNCTION));
+ Lists.transform(strings, TO_STRING_FUNCTION);
return result;
}
1
0
r379 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight
by fdesbois@users.forge.codelutin.com 09 Aug '12
by fdesbois@users.forge.codelutin.com 09 Aug '12
09 Aug '12
Author: fdesbois
Date: 2012-08-09 15:50:53 +0200 (Thu, 09 Aug 2012)
New Revision: 379
Url: http://forge.codelutin.com/repositories/revision/sammoa/379
Log:
Improve orderings
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/FlightDAOImpl.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Flights.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Strates.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/StrateModel.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-09 09:48:59 UTC (rev 378)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-09 13:50:53 UTC (rev 379)
@@ -32,6 +32,7 @@
import fr.ulr.sammoa.persistence.Campaign;
import fr.ulr.sammoa.persistence.Flight;
import fr.ulr.sammoa.persistence.FlightDAO;
+import fr.ulr.sammoa.persistence.Flights;
import fr.ulr.sammoa.persistence.GeoPoint;
import fr.ulr.sammoa.persistence.GeoPointDAO;
import fr.ulr.sammoa.persistence.Observation;
@@ -103,8 +104,10 @@
FlightDAO dao = SammoaDAOHelper.getFlightDAO(transaction);
- result = dao.findAllByCampaignOrderedByBeginDateDesc(campaign);
+ result = dao.findAllByCampaign(campaign);
+ Collections.sort(result, Flights.onDate());
+
} catch (TopiaException e) {
throw new TopiaRuntimeException(e);
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/FlightDAOImpl.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/FlightDAOImpl.java 2012-08-09 09:48:59 UTC (rev 378)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/FlightDAOImpl.java 2012-08-09 13:50:53 UTC (rev 379)
@@ -27,8 +27,6 @@
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.TopiaRuntimeException;
-import java.util.List;
-
/**
* Created: 08/06/12
*
@@ -60,23 +58,23 @@
return result;
}
- public List<Flight> findAllByCampaignOrderedByBeginDateDesc(Campaign campaign) {
-
- List<Flight> result;
-
- String ql = String.format("FROM %1$s WHERE %2$s = :campaign ORDER BY %3$s DESC",
- FlightImpl.class.getSimpleName(),
- Flight.PROPERTY_CAMPAIGN,
- Flight.PROPERTY_BEGIN_DATE
- );
-
- try {
- result = context.findAll(ql, "campaign", campaign);
-
- } catch (TopiaException e) {
- throw new TopiaRuntimeException(e);
- }
- return result;
- }
+// public List<Flight> findAllByCampaignOrderedByBeginDateDesc(Campaign campaign) {
+//
+// List<Flight> result;
+//
+// String ql = String.format("FROM %1$s WHERE %2$s = :campaign ORDER BY %3$s DESC",
+// FlightImpl.class.getSimpleName(),
+// Flight.PROPERTY_CAMPAIGN,
+// Flight.PROPERTY_BEGIN_DATE
+// );
+//
+// try {
+// result = context.findAll(ql, "campaign", campaign);
+//
+// } catch (TopiaException e) {
+// throw new TopiaRuntimeException(e);
+// }
+// return result;
+// }
}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Flights.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Flights.java 2012-08-09 09:48:59 UTC (rev 378)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Flights.java 2012-08-09 13:50:53 UTC (rev 379)
@@ -25,7 +25,11 @@
import com.google.common.base.Function;
import com.google.common.base.Predicate;
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.Ordering;
+import java.util.Comparator;
+
/**
* Created: 19/07/12
*
@@ -36,6 +40,10 @@
private Flights() {
// static class do not have instanciation
}
+
+ public static Comparator<Flight> onDate() {
+ return ON_DATE_COMPARATOR;
+ }
public static Function<Flight, String> toSystemId() {
return TO_SYSTEM_ID_FUNCTION;
@@ -80,4 +88,33 @@
return input == null || systemId.equals(input.getSystemId());
}
}
+
+ protected static Comparator<Flight> ON_DATE_COMPARATOR =
+ new Comparator<Flight>() {
+
+ @Override
+ public int compare(Flight flight1, Flight flight2) {
+ int result = ComparisonChain
+ .start()
+ // on beginDate, first null
+ .compare(
+ flight1.getBeginDate(),
+ flight2.getBeginDate(),
+ Ordering.natural().reverse().nullsFirst()
+ )
+ // on endDate null
+ .compareTrueFirst(
+ flight1.getEndDate() == null,
+ flight2.getEndDate() == null
+ )
+ // on flightNumber
+ .compare(
+ flight1.getFlightNumber(),
+ flight2.getFlightNumber(),
+ Ordering.natural().reverse()
+ )
+ .result();
+ return result;
+ }
+ };
}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Strates.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Strates.java 2012-08-09 09:48:59 UTC (rev 378)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Strates.java 2012-08-09 13:50:53 UTC (rev 379)
@@ -26,6 +26,7 @@
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
+import com.google.common.collect.Ordering;
import java.util.Comparator;
@@ -89,19 +90,9 @@
@Override
public int compare(Strate o1, Strate o2) {
- int result;
- if (o1 == null && o2 != null) {
- result = -1;
-
- } else if (o1 != null && o2 == null) {
- result = 1;
-
- } else if (o1 == null) {
- result = 0;
-
- } else {
- result = o1.getCode().compareTo(o2.getCode());
- }
+ int result = Ordering.natural()
+ .nullsFirst()
+ .compare(o1.getCode(), o2.getCode());
return result;
}
};
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-09 09:48:59 UTC (rev 378)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-09 13:50:53 UTC (rev 379)
@@ -305,7 +305,7 @@
}
List<StrateModel> result =
- Ordering.from(StrateModel.onCode()).sortedCopy(strateMap.values());
+ Ordering.natural().sortedCopy(strateMap.values());
result.add(0, strateAll);
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/StrateModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/StrateModel.java 2012-08-09 09:48:59 UTC (rev 378)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/StrateModel.java 2012-08-09 13:50:53 UTC (rev 379)
@@ -29,7 +29,6 @@
import fr.ulr.sammoa.persistence.Strates;
import fr.ulr.sammoa.ui.swing.BaseModel;
-import java.util.Comparator;
import java.util.List;
/**
@@ -37,7 +36,7 @@
*
* @author fdesbois <desbois(a)codelutin.com>
*/
-public class StrateModel extends BaseModel {
+public class StrateModel extends BaseModel implements Comparable<StrateModel> {
private static final long serialVersionUID = 1L;
@@ -76,28 +75,16 @@
firePropertyChange(PROPERTY_TRANSECTS, oldValue, transects);
}
- public static Comparator<StrateModel> onCode() {
- return ON_CODE_COMPARATOR;
+ @Override
+ public int compareTo(StrateModel o) {
+ int result = Strates.onCode().compare(getSource(), o.getSource());
+ return result;
}
public static Predicate<StrateModel> withStrate(Strate strate) {
return new StrateModelWithStratePredicate(strate);
}
- protected static Comparator<StrateModel> ON_CODE_COMPARATOR =
- new Comparator<StrateModel>() {
-
- Comparator<Strate> strateComparator = Strates.onCode();
-
- @Override
- public int compare(StrateModel o1, StrateModel o2) {
- Strate strate1 = o1.getSource();
- Strate strate2 = o2.getSource();
- int result = strateComparator.compare(strate1, strate2);
- return result;
- }
- };
-
protected static class StrateModelWithStratePredicate
implements Predicate<StrateModel> {
1
0
r378 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application/map src/site/rst
by tchemit@users.forge.codelutin.com 09 Aug '12
by tchemit@users.forge.codelutin.com 09 Aug '12
09 Aug '12
Author: tchemit
Date: 2012-08-09 11:48:59 +0200 (Thu, 09 Aug 2012)
New Revision: 378
Url: http://forge.codelutin.com/repositories/revision/sammoa/378
Log:
refs #1203: Export SHP (add efforts and observations export model + fix doc)
Added:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/LegStatus.java
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java
trunk/src/site/rst/import-export.rst
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java 2012-08-09 09:47:55 UTC (rev 377)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java 2012-08-09 09:48:59 UTC (rev 378)
@@ -80,29 +80,252 @@
}
public void exportEffortsMap(ExportMapModel dataModel) {
+ Preconditions.checkNotNull(dataModel.getCampaign());
+ Preconditions.checkNotNull(dataModel.getBeginDate());
+ Preconditions.checkNotNull(dataModel.getEndDate());
+
if (logger.isInfoEnabled()) {
- logger.info("Start EffortsMap export to " +
- dataModel.getExportDirectory() + "::" +
+ logger.info("Start EffortsMap export to {} :: {}",
+ dataModel.getExportDirectory(),
dataModel.getExportFilename());
}
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
+ long startTime = TimeLog.getTime();
+ Campaign campaign = dataModel.getCampaign();
+ Region region = campaign.getRegion();
+
+ // * uniquement pour un parcours de type LEG, sinon la cellule sera vide
+ // ** uniquement pour un parcours de type CIRCLE_BACK, sinon la cellule sera vide
+ DbfTableModelBuilder builder = new DbfTableModelBuilder()
+ .stringColumn("REGION") // (campaign.region.code)
+ .stringColumn("CAMPAIGN") // (campaign.code)
+ .integerColumn("SECTOR") // * (route.transectFlight.transect.strate.sector.sectorNumber)
+ .stringColumn("STRATE_TYPE") // * (route.transectFlight.transect.strate.strateType.code)
+ .stringColumn("STRATE") // * (route.transectFlight.transect.strate.code)
+ .stringColumn("TRANSECT") // * (route.transectFlight.transect.name)
+ .integerColumn("PASSAGE") // * (route.transectFlight.crossingNumber)
+ .integerColumn("FLIGHT") // (route.flight.flightNumber)
+ .stringColumn("COMPUTER") // (route.flight.systemId)
+ .stringColumn("ROUTE_TYPE") // (route.routeType.name)
+ .stringColumn("EFFORT_GROUP") // * ()
+ .stringColumn("EFFORT") // * ()
+ .stringColumn("STATUS") // * (LegStatus.name)
+ .dateColumn("DATE") // (route.beginTime)
+ .stringColumn("HHMMSS") // (format(route.beginTime, "HHmmss"))
+ .integerColumn("SEA_STATE") // (route.seaState)
+ .integerColumn("SWELL") // (route.swell)
+ .integerColumn("TURBIDITY") // (route.turbidity)
+ .integerColumn("SKY_GLINT") // (route.skyGlint)
+ .stringColumn("GLARE_FROM") // (route.glareFrom)
+ .stringColumn("GLARE_TO") // (route.glareTo)
+ .integerColumn("GLARE_SEVERITY") // (route.glareSeverity)
+ .booleanColumn("GLARE_UNDER") // (route.glareUnder)
+ .integerColumn("CLOUD_COVER") // (route.cloudCover)
+ .stringColumn("SUBJECTIVE") // (route.subjectiveConditions)
+ .stringColumn("UNEXP_LEFT") // (route.unexpectedLeft)
+ .stringColumn("UNEXP_RIGHT") // (route.unexpectedRight)
+ .stringColumn("LEFT_REAR") // (route.observerPosition[FRONT_LEFT].observer.initials)
+ .stringColumn("RIGHT_REAR") // (route.observerPosition[FRONT_RIGHT].observer.initials)
+ .stringColumn("CENTER") // (route.observerPosition[NAVIGATOR].observer.initials)
+ .stringColumn("CB_CAUSE") // ** ()
+ .doubleColumn("LAT", 19, 11) // (geoPoint.latitude)
+ .doubleColumn("LON", 19, 11) // (geoPoint.longitude)
+ .doubleColumn("SPEED", 19, 11) // (geoPoint.speed)
+ .doubleColumn("ALTITUDE", 19, 11) // (geoPoint.altitude)
+ .stringColumn("GPS_TIME") // (format(geoPoint.recordTime, "HHmmss"))
+ .stringColumn("AIRCRAFT") // (route.flight.planeImmatriculation)
+ .stringColumn("COMMENT") // (route.comment)
+ .build();
+
+ EsriGraphicList graphicList = new EsriPointList();
+ List<Flight> campaignFlights = context.getFlightService().getFlights(dataModel.getCampaign());
+
+ // Filter on period
+ final PeriodDates period = new PeriodDates(dataModel.getBeginDate(), dataModel.getEndDate());
+ Iterable<Flight> flights = Iterables.filter(campaignFlights, new Predicate<Flight>() {
+
+ @Override
+ public boolean apply(Flight input) {
+ return period.between(input.getBeginDate());
+ }
+ });
+
+ // Export for each flight
+ for (Flight flight : flights) {
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Export GeoPoints from flight {} - {} - {} - {}",
+ new Object[]{flight.getFlightNumber(),
+ flight.getSystemId(),
+ campaign.getCode(),
+ region.getCode()}
+ );
+ }
+
+ List<GeoPoint> geoPoints = context.getFlightService().getFlightGeoPoints(flight);
+
+ // One record by GeoPoint
+ for (GeoPoint geoPoint : geoPoints) {
+
+ Map<String, Object> record = Maps.newHashMap();
+
+ record.put("REGION", region.getCode());
+ record.put("CAMPAIGN", campaign.getCode());
+ record.put("FLIGHT", flight.getFlightNumber());
+ record.put("COMPUTER", flight.getSystemId());
+ record.put("DATE", geoPoint.getRecordTime());
+ record.put("HHMMSS", timeFormat.format(geoPoint.getRecordTime()));
+ record.put("LAT", geoPoint.getLatitude());
+ record.put("LON", geoPoint.getLongitude());
+ record.put("SPEED", geoPoint.getSpeed());
+ record.put("ALTITUDE", geoPoint.getAltitude());
+
+ builder.addValues(record);
+
+ if (logger.isTraceEnabled()) {
+ logger.trace("Record={}", record);
+ }
+
+ OMGraphic graphic = new OMPoint(geoPoint.getLatitude(), geoPoint.getLongitude());
+ graphicList.add(graphic);
+ }
}
+
+ startTime = timeLog.log(startTime, "exportGeoPointsMap", "after building EsriGraphicList and DbfTableModel");
+
+ // Execute export with EsriShapeExport
+ DbfTableModel tableModel = builder.getModel();
+ String pathFile = new File(dataModel.getExportDirectory(), dataModel.getExportFilename()).getAbsolutePath();
+ EsriShapeExport shapeExport = new EsriShapeExport(graphicList, tableModel, pathFile);
+ shapeExport.export();
+
+ timeLog.log(startTime, "exportEffortsMap", "after EsriShapeExport execution");
}
public void exportObservationsMap(ExportMapModel dataModel) {
+ Preconditions.checkNotNull(dataModel.getCampaign());
+ Preconditions.checkNotNull(dataModel.getBeginDate());
+ Preconditions.checkNotNull(dataModel.getEndDate());
+
if (logger.isInfoEnabled()) {
- logger.info("Start ObservationsMap export to " +
- dataModel.getExportDirectory() + "::" +
+ logger.info("Start ObservationsMap export to {} :: {}",
+ dataModel.getExportDirectory(),
dataModel.getExportFilename());
}
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
+ long startTime = TimeLog.getTime();
+ Campaign campaign = dataModel.getCampaign();
+ Region region = campaign.getRegion();
+
+ // * uniquement pour un parcours de type LEG, sinon la cellule sera vide
+ // ** uniquement pour un parcours de type CIRCLE_BACK, sinon la cellule sera vide
+ DbfTableModelBuilder builder = new DbfTableModelBuilder()
+ .stringColumn("REGION") // (campaign.region.code)
+ .stringColumn("CAMPAIGN") // (campaign.code)
+ .integerColumn("SECTOR") // * (route.transectFlight.transect.strate.sector.sectorNumber)
+ .stringColumn("STRATE_TYPE") // * (route.transectFlight.transect.strate.strateType.code)
+ .stringColumn("STRATE") // * (route.transectFlight.transect.strate.code)
+ .stringColumn("TRANSECT") // * (route.transectFlight.transect.name)
+ .integerColumn("PASSAGE") // * (route.transectFlight.crossingNumber)
+ .integerColumn("FLIGHT") // (route.flight.flightNumber)
+ .stringColumn("COMPUTER") // (route.flight.systemId)
+ .stringColumn("ROUTE_TYPE") // (route.routeType.name)
+ .stringColumn("EFFORT_GROUP") // * ()
+ .stringColumn("EFFORT") // * ()
+ .stringColumn("OBSERVATION") // ()
+ .dateColumn("DATE") // (observation.beginTime)
+ .stringColumn("HHMMSS") // (format(observation.beginTime, "HHmmss"))
+ .stringColumn("TAXON") // (observation.species.type)
+ .stringColumn("GROUP") // (observation.species.groupName)
+ .stringColumn("FAMILY") // (observation.species.family)
+ .stringColumn("SPECIES") // (observation.species.code)
+ .stringColumn("SPECIES_NAME") // (observation.species.commonName)
+ .stringColumn("SPECIES_LATIN") // (observation.species.latinName)
+ .integerColumn("POD_SIZE") // (observation.podSize)
+ .stringColumn("AGE") // (observation.age)
+ .integerColumn("DEC_ANGLE") // (observation.decAngle)
+ .stringColumn("CUE") // (observation.cue)
+ .stringColumn("BEHAVIOUR") // (observation.behaviour)
+ .integerColumn("SWIM_DIR") // (observation.swimDir)
+ .stringColumn("CALVES") // (observation.calves)
+ .stringColumn("PHOTO") // (observation.photo)
+ .stringColumn("OBSERVER") // (observation.observerPosition.observer.initials)
+ .stringColumn("SIDE") // (observation.observerPosition.observer.position.name)
+ .stringColumn("STATUS") // (observation.observationStatus.name)
+ .stringColumn("CB_CAUSE") // ** ()
+ .doubleColumn("LAT", 19, 11) // (geoPoint.latitude)
+ .doubleColumn("LON", 19, 11) // (geoPoint.longitude)
+ .doubleColumn("SPEED", 19, 11) // (geoPoint.speed)
+ .doubleColumn("ALTITUDE", 19, 11) // (geoPoint.altitude)
+ .stringColumn("GPS_TIME") // (format(geoPoint.recordTime, "HHmmss"))
+ .stringColumn("AIRCRAFT") // (observation.flight.planeImmatriculation)
+ .stringColumn("COMMENT") // (observation.comment)
+ .build();
+
+ EsriGraphicList graphicList = new EsriPointList();
+ List<Flight> campaignFlights = context.getFlightService().getFlights(dataModel.getCampaign());
+
+ // Filter on period
+ final PeriodDates period = new PeriodDates(dataModel.getBeginDate(), dataModel.getEndDate());
+ Iterable<Flight> flights = Iterables.filter(campaignFlights, new Predicate<Flight>() {
+
+ @Override
+ public boolean apply(Flight input) {
+ return period.between(input.getBeginDate());
+ }
+ });
+
+ // Export for each flight
+
+ for (Flight flight : flights) {
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Export GeoPoints from flight {} - {} - {} - {}",
+ new Object[]{flight.getFlightNumber(),
+ flight.getSystemId(),
+ campaign.getCode(),
+ region.getCode()}
+ );
+ }
+
+ List<GeoPoint> geoPoints = context.getFlightService().getFlightGeoPoints(flight);
+
+ // One record by GeoPoint
+ for (GeoPoint geoPoint : geoPoints) {
+
+ Map<String, Object> record = Maps.newHashMap();
+
+ record.put("REGION", region.getCode());
+ record.put("CAMPAIGN", campaign.getCode());
+ record.put("FLIGHT", flight.getFlightNumber());
+ record.put("COMPUTER", flight.getSystemId());
+ record.put("DATE", geoPoint.getRecordTime());
+ record.put("HHMMSS", timeFormat.format(geoPoint.getRecordTime()));
+ record.put("LAT", geoPoint.getLatitude());
+ record.put("LON", geoPoint.getLongitude());
+ record.put("SPEED", geoPoint.getSpeed());
+ record.put("ALTITUDE", geoPoint.getAltitude());
+
+ builder.addValues(record);
+
+ if (logger.isTraceEnabled()) {
+ logger.trace("Record={}", record);
+ }
+
+ OMGraphic graphic = new OMPoint(geoPoint.getLatitude(), geoPoint.getLongitude());
+ graphicList.add(graphic);
+ }
}
+
+ startTime = timeLog.log(startTime, "exportObservationsMap", "after building EsriGraphicList and DbfTableModel");
+
+ // Execute export with EsriShapeExport
+ DbfTableModel tableModel = builder.getModel();
+ String pathFile = new File(dataModel.getExportDirectory(), dataModel.getExportFilename()).getAbsolutePath();
+ EsriShapeExport shapeExport = new EsriShapeExport(graphicList, tableModel, pathFile);
+ shapeExport.export();
+
+ timeLog.log(startTime, "exportObservationsMap", "after EsriShapeExport execution");
}
public void exportGeoPointsMap(ExportMapModel dataModel) {
@@ -111,8 +334,8 @@
Preconditions.checkNotNull(dataModel.getEndDate());
if (logger.isInfoEnabled()) {
- logger.info("Start GeoPointsMap export to " +
- dataModel.getExportDirectory() + "::" +
+ logger.info("Start GeoPointsMap export to {} :: {}",
+ dataModel.getExportDirectory(),
dataModel.getExportFilename());
}
@@ -148,15 +371,14 @@
});
// Export for each flight
- Map<String, Object> record = Maps.newHashMap();
for (Flight flight : flights) {
if (logger.isInfoEnabled()) {
logger.info(String.format("Export GeoPoints from flight %d - %s - %s - %s",
- flight.getFlightNumber(),
- flight.getSystemId(),
- campaign.getCode(),
- region.getCode())
+ flight.getFlightNumber(),
+ flight.getSystemId(),
+ campaign.getCode(),
+ region.getCode())
);
}
@@ -165,7 +387,7 @@
// One record by GeoPoint
for (GeoPoint geoPoint : geoPoints) {
- record.clear();
+ Map<String, Object> record = Maps.newHashMap();
record.put("REGION", region.getCode());
record.put("CAMPAIGN", campaign.getCode());
Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/LegStatus.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/LegStatus.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/LegStatus.java 2012-08-09 09:48:59 UTC (rev 378)
@@ -0,0 +1,16 @@
+package fr.ulr.sammoa.application.map;
+
+/**
+ * TODO
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.5
+ */
+public enum LegStatus {
+ BEAGIN,
+ ADD, END;
+
+ public String getName() {
+ return name();
+ }
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/LegStatus.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Modified: trunk/src/site/rst/import-export.rst
===================================================================
--- trunk/src/site/rst/import-export.rst 2012-08-09 09:47:55 UTC (rev 377)
+++ trunk/src/site/rst/import-export.rst 2012-08-09 09:48:59 UTC (rev 378)
@@ -203,19 +203,19 @@
- REGION : Code de la région
- * route.flight.campaign.region.code
+ * campaign.region.code
- CAMPAIGN : Code de la campagne
- * route.flight.campaign.code
+ * campaign.code
-- SECTOR* : Numéro du secteur
+- SECTOR* : Numéro du secteur (N)
* route.transectFlight.transect.strate.sector.sectorNumber
- STRATE_TYPE* : Type de strate
- * route.transectFlight.transect.strate.strateType
+ * route.transectFlight.transect.strate.strateType.code
- STRATE* : Code de la strate
@@ -225,11 +225,11 @@
* route.transectFlight.transect.name
-- PASSAGE* : Numéro de passage
+- PASSAGE* : Numéro de passage (N)
* route.transectFlight.crossingNumber
-- FLIGHT : Numéro de vol
+- FLIGHT : Numéro de vol (N)
* route.flight.flightNumber
@@ -239,7 +239,7 @@
- ROUTE_TYPE : Type de parcours (LEG, TRANSIT, CIRCLE_BACK)
- * route.routeType
+ * route.routeType.name
- EFFORT_GROUP* : Identifiant du group d'effort
@@ -250,15 +250,13 @@
* "L" + route.effortNumber + "-" + route.flight.flightNumber + "-" + route.flight.systemId
+- STATUS* : LegStatus.name (BEGIN, ADD, END)
-
-- STATUS* : Status (BEGIN, ADD, END)
-
* si route.routeType = TRANSIT ou CIRCLE_BACK => ajout d'une ligne END (ensuite currentLegGroup = null)
* si previousRoute.routeType = TRANSIT ou CIRCLE_BACK (ou currentLegGroup = null) => BEGIN
* si previousRoute.routeType = LEG et nextRoute.routeType = LEG (ou currentLegGroup != null) => ADD
-- DATE : Date du parcours/segment
+- DATE : Date du parcours/segment (D)
* route.beginTime
@@ -266,19 +264,19 @@
* format(route.beginTime, "HHmmss")
-- SEA_STATE : Etat de la mer
+- SEA_STATE : Etat de la mer (N)
* route.seaState
-- SWELL : Houle
+- SWELL : Houle (N)
* route.swell
-- TURBIDITY : Turbidité
+- TURBIDITY : Turbidité (N)
* route.turbidity
-- SKY_GLINT : Transparence
+- SKY_GLINT : Transparence (N)
* route.skyGlint
@@ -290,15 +288,15 @@
* route.glareTo
-- GLARE_SEVERITY : Intensité d'éblouissement
+- GLARE_SEVERITY : Intensité d'éblouissement (N)
* route.glareSeverity
-- GLARE_UNDER :
+- GLARE_UNDER : (L)
* route.glareUnder
-- CLOUD_COVER : Couverture nuageuse
+- CLOUD_COVER : Couverture nuageuse (N)
* route.cloudCover
@@ -326,26 +324,23 @@
* route.observerPosition[NAVIGATOR].observer.initials
-
-
-
- CB_CAUSE** : Cause du circle-back
* "O" + route.circleBackCause.observationNumber + "-" + route.circleBackCause.flight.flightNumber + "-" + route.circleBackCause.flight.systemId
-- LAT : Latitude du point GPS
+- LAT : Latitude du point GPS (N)
* geoPoint.latitude
-- LON : Longitude du point GPS
+- LON : Longitude du point GPS (N)
* geoPoint.longitude
-- SPEED : Vitesse de l'avion à ce point GPS
+- SPEED : Vitesse de l'avion à ce point GPS (N)
* geoPoint.speed
-- ALTITUDE : Altitude de l'avion à ce point GPS
+- ALTITUDE : Altitude de l'avion à ce point GPS (N)
* geoPoint.altitude
@@ -387,7 +382,7 @@
* observation.flight.campaign.code
-- SECTOR* : Numéro du secteur
+- SECTOR* : Numéro du secteur (N)
* route.transectFlight.transect.strate.sector.sectorNumber
@@ -403,11 +398,11 @@
* route.transectFlight.transect.name
-- PASSAGE* : Numéro de passage
+- PASSAGE* : Numéro de passage (N)
* route.transectFlight.crossingNumber
-- FLIGHT : Numéro de vol
+- FLIGHT : Numéro de vol (N)
* route.flight.flightNumber
@@ -417,7 +412,7 @@
- ROUTE_TYPE : Type de parcours (LEG, TRANSIT, CIRCLE_BACK)
- * route.routeType
+ * route.routeType.name
- EFFORT_GROUP* : Identifiant du group d'effort
@@ -432,7 +427,7 @@
* "O" + observation.observationNumber + "-" + observation.flight.flightNumber + "-" + observation.flight.systemId
-- DATE : Date de l'observation
+- DATE : Date de l'observation (D)
* observation.beginTime
@@ -464,7 +459,7 @@
* observation.species.latinName
-- POD_SIZE : Taille des groupes
+- POD_SIZE : Taille des groupes (N)
* observation.podSize
@@ -472,7 +467,7 @@
* observation.age
-- DEC_ANGLE : Angle ou Bande
+- DEC_ANGLE : Angle ou Bande (N)
* observation.decAngle
@@ -484,7 +479,7 @@
* observation.behaviour
-- SWIM_DIR : Direction de nage
+- SWIM_DIR : Direction de nage (N)
* observation.swimDir
@@ -502,32 +497,29 @@
- SIDE : Position de l'observateur (L : LEFT, R : RIGHT, C : CENTER)
- * observation.observerPosition.observer.position
+ * observation.observerPosition.observer.position.name
- STATUS : Status de l'observation (NEW, CIRCLE_BACK, RECAPTURE, NO_RECAPTURE)
- * observation.observationStatus
+ * observation.observationStatus.name
-
-
-
- CB_CAUSE** : Cause du circle-back
* "O" + route.circleBackCause.observationNumber + "-" + route.circleBackCause.flight.flightNumber + "-" + route.circleBackCause.flight.systemId
-- LAT : Latitude du point GPS
+- LAT : Latitude du point GPS (N)
* geoPoint.latitude
-- LON : Longitude du point GPS
+- LON : Longitude du point GPS (N)
* geoPoint.longitude
-- SPEED : Vitesse de l'avion à ce point GPS
+- SPEED : Vitesse de l'avion à ce point GPS (N)
* geoPoint.speed
-- ALTITUDE : Altitude de l'avion à ce point GPS
+- ALTITUDE : Altitude de l'avion à ce point GPS (N)
* geoPoint.altitude
1
0
r377 - trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map
by tchemit@users.forge.codelutin.com 09 Aug '12
by tchemit@users.forge.codelutin.com 09 Aug '12
09 Aug '12
Author: tchemit
Date: 2012-08-09 11:47:55 +0200 (Thu, 09 Aug 2012)
New Revision: 377
Url: http://forge.codelutin.com/repositories/revision/sammoa/377
Log:
add boolean support in dbf export model builder
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java 2012-08-09 09:47:24 UTC (rev 376)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/DbfTableModelBuilder.java 2012-08-09 09:47:55 UTC (rev 377)
@@ -77,10 +77,20 @@
return result;
}
+ public DbfColumnModel newBooleanColumn(String name) {
+ DbfColumnModel result = new DbfColumnModel(name, DbfTableModel.TYPE_LOGICAL);
+ result.setLength(1);
+ return result;
+ }
+
public DbfTableModelBuilder stringColumn(String name) {
return dbfColumn(newStringColumn(name));
}
+ public DbfTableModelBuilder booleanColumn(String name) {
+ return dbfColumn(newBooleanColumn( name ));
+ }
+
public DbfTableModelBuilder integerColumn(String name) {
return dbfColumn(newIntegerColumn(name));
}
@@ -171,6 +181,8 @@
result = DATE_FORMAT.format(date);
}
+ }else if (DbfTableModel.TYPE_LOGICAL == type) {
+ result = ( (Boolean) value ) ? "T" : "F";
}
return result;
}
1
0
Author: tchemit
Date: 2012-08-09 11:47:24 +0200 (Thu, 09 Aug 2012)
New Revision: 376
Url: http://forge.codelutin.com/repositories/revision/sammoa/376
Log:
remove obsolete directory
Removed:
trunk/doc/
1
0