This is an automated email from the git hooks/post-receive script. New commit to branch feature/6944 in repository observe. See http://git.codelutin.com/observe.git commit 6dbaa2121a5bb745abb9e332c2814537cc95d6ac Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Apr 16 08:42:39 2015 +0200 add compute trip for map --- .../src/main/java/fr/ird/observe/DataService.java | 25 ++++++ .../observe/entities/seine/TripSeineDAOImpl.java | 90 ++++++++++++++++++++++ .../java/fr/ird/observe/tripMap/TripMapPoint.java | 51 ++++++++++++ 3 files changed, 166 insertions(+) diff --git a/observe-business/src/main/java/fr/ird/observe/DataService.java b/observe-business/src/main/java/fr/ird/observe/DataService.java index 029675a..e35ea06 100644 --- a/observe-business/src/main/java/fr/ird/observe/DataService.java +++ b/observe-business/src/main/java/fr/ird/observe/DataService.java @@ -84,6 +84,7 @@ import fr.ird.observe.entities.seine.TargetLength; import fr.ird.observe.entities.seine.TargetSample; import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.entities.seine.TripSeineDAO; +import fr.ird.observe.tripMap.TripMapPoint; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -1632,6 +1633,30 @@ public class DataService { } } + public List<TripMapPoint> loadTrip(DataSource source, String id) throws DataSourceException { + if (!source.canReadData()) { + if (log.isDebugEnabled()) { + log.debug("Can not read data!"); + } + return null; + } + + String txName = "loadTrip"; + TopiaContext tx = beginTransaction(source, txName); + + try { + TripSeineDAO dao = (TripSeineDAO) source.getDAO(tx, TripSeine.class); + List<TripMapPoint> tripMapPoints = dao.extractTripMap(id); + return tripMapPoints; + + } catch (Exception e) { + throw new DataSourceException(e, txName); + } finally { + closeTransaction(source, tx, txName); + } + } + + // ------------------------------------------------------------------------ // -- Méthodes de chargement de données // ------------------------------------------------------------------------ diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java index bb185d6..21215d9 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineDAOImpl.java @@ -21,11 +21,15 @@ */ package fr.ird.observe.entities.seine; +import com.google.common.collect.Lists; import fr.ird.observe.entities.constants.ReferenceLocale; +import fr.ird.observe.entities.constants.seine.SchoolType; +import fr.ird.observe.entities.referentiel.Harbour; import fr.ird.observe.entities.referentiel.Person; import fr.ird.observe.entities.referentiel.PersonImpl; import fr.ird.observe.entities.referentiel.Vessel; import fr.ird.observe.entities.referentiel.VesselImpl; +import fr.ird.observe.tripMap.TripMapPoint; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.framework.TopiaSQLQuery; @@ -34,6 +38,8 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Time; +import java.util.Calendar; import java.util.List; /** @@ -72,6 +78,90 @@ public class TripSeineDAOImpl<E extends TripSeine> extends TripSeineDAOAbstract< } + public List<TripMapPoint> extractTripMap(String tripId) throws TopiaException { + + TripSeine tripSeine = findByTopiaId(tripId); + + List<TripMapPoint> tripMapPoints = Lists.newLinkedList(); + + // add departure harbours + Harbour departureHarbour = tripSeine.getDepartureHarbour(); + if (departureHarbour != null) { + TripMapPoint departurePoint = new TripMapPoint(); + departurePoint.setTime(tripSeine.getStartDate()); + departurePoint.setLatitude(departureHarbour.getLatitude()); + departurePoint.setLongitude(departureHarbour.getLongitude()); + tripMapPoints.add(departurePoint); + } + + // Add Activities + TripMapPointQuery tripMapPointQuery = new TripMapPointQuery(tripId); + tripMapPoints.addAll(tripMapPointQuery.findMultipleResult(context)); + + // add landing harbours + Harbour landingHarbour = tripSeine.getLandingHarbour(); + if (landingHarbour != null) { + TripMapPoint landingPoint = new TripMapPoint(); + landingPoint.setTime(tripSeine.getEndDate()); + landingPoint.setLatitude(landingHarbour.getLatitude()); + landingPoint.setLongitude(landingHarbour.getLongitude()); + tripMapPoints.add(landingPoint); + } + + return tripMapPoints; + } + + private static class TripMapPointQuery extends TopiaSQLQuery<TripMapPoint> { + + private static String SQL = "SELECT" + + " r.date, " + + " a.time, " + + " a.latitude," + + " a.longitude," + + " s.schoolType" + + " FROM observe_seine.route r" + + " INNER JOIN observe_seine.activity a" + + " ON a.route = r.topiaId" + + " LEFT OUTER JOIN observe_seine.set s" + + " ON s.topiaId = a.set" + + " WHERE r.trip = ?" + + " ORDER BY r.date, a.time"; + + protected String tripId; + + public TripMapPointQuery(String tripId) { + this.tripId = tripId; + } + + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + PreparedStatement preparedStatement = connection.prepareStatement(SQL); + preparedStatement.setString(1, tripId); + return preparedStatement; + } + + @Override + protected TripMapPoint prepareResult(ResultSet resultSet) throws SQLException { + + TripMapPoint point = new TripMapPoint(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(resultSet.getDate(1)); + Time time = resultSet.getTime(2); + calendar.set(Calendar.HOUR_OF_DAY, time.getHours()); + calendar.set(Calendar.MINUTE, time.getMinutes()); + calendar.set(Calendar.SECOND, time.getSeconds()); + point.setTime(calendar.getTime()); + point.setLatitude(resultSet.getFloat(3)); + point.setLongitude(resultSet.getFloat(4)); + if (resultSet.getString(5) != null) { + point.setSchoolType(SchoolType.values()[resultSet.getInt(5)]); + } + + return point; + } + } + + private static class StubSqlQuery<E extends TripSeine> extends TopiaSQLQuery<E> { private final String sql; diff --git a/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPoint.java b/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPoint.java new file mode 100644 index 0000000..247240a --- /dev/null +++ b/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPoint.java @@ -0,0 +1,51 @@ +package fr.ird.observe.tripMap; + +import fr.ird.observe.entities.constants.seine.SchoolType; + +import java.util.Date; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class TripMapPoint { + + protected Date time; + + protected float latitude; + + protected float longitude; + + protected SchoolType schoolType; + + public Date getTime() { + return time; + } + + public void setTime(Date time) { + this.time = time; + } + + public float getLatitude() { + return latitude; + } + + public void setLatitude(float latitude) { + this.latitude = latitude; + } + + public float getLongitude() { + return longitude; + } + + public void setLongitude(float longitude) { + this.longitude = longitude; + } + + public SchoolType getSchoolType() { + return schoolType; + } + + public void setSchoolType(SchoolType schoolType) { + this.schoolType = schoolType; + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.