This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit feb42a72b89dd9044b03fea5e8c425c16e4b8ac5 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri May 22 13:13:06 2015 +0200 utilisation de requetes spécifique pour les mises à jour plutôt que de charger la base via hibernate (refs #7135) --- .../src/main/java/fr/ird/observe/DataService.java | 55 +++++++++++++ .../main/java/fr/ird/observe/entities/Trip.java | 4 - .../entities/longline/TripLonglineDAOImpl.java | 89 +++++++++++++++++++++ .../entities/longline/TripLonglineImpl.java | 85 ++++++++++---------- .../ird/observe/entities/seine/RouteDAOImpl.java | 47 +++++++++++ .../fr/ird/observe/entities/seine/RouteImpl.java | 33 +------- .../observe/entities/seine/TripSeineDAOImpl.java | 90 ++++++++++++++++++++++ .../ird/observe/entities/seine/TripSeineImpl.java | 74 ++++++++++-------- .../impl/longline/ActivityLonglineUIHandler.java | 72 ++++++++++++++++- .../open/impl/longline/TripLonglineUIHandler.java | 5 +- .../ui/content/open/impl/seine/RouteUIHandler.java | 64 ++++++++------- .../open/impl/seine/TripSeineUIHandler.java | 5 +- 12 files changed, 477 insertions(+), 146 deletions(-) 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 6c13752..db3693c 100644 --- a/observe-business/src/main/java/fr/ird/observe/DataService.java +++ b/observe-business/src/main/java/fr/ird/observe/DataService.java @@ -2551,4 +2551,59 @@ public class DataService { } } + + public boolean updateEndDate(DataSource source, String tripId) throws DataSourceException { + + boolean wasUpdated; + + String txName = "updateEndDate"; + TopiaContext tx = beginTransaction(source, txName); + try { + + if (Entities.isSeineId(tripId)) { + + TripSeineDAO dao = (TripSeineDAO) source.getDAO(tx, TripSeine.class); + TripSeine trip = dao.findByTopiaId(tripId); + wasUpdated = dao.updateEndDate(trip); + + } else { + + TripLonglineDAO dao = (TripLonglineDAO) source.getDAO(tx, TripLongline.class); + TripLongline trip = dao.findByTopiaId(tripId); + wasUpdated = dao.updateEndDate(trip); + + } + + if (wasUpdated) { + commitTransaction(source, tx, txName); + } + + return wasUpdated; + + } catch (Exception e) { + throw new DataSourceException(e, txName); + } finally { + closeTransaction(source, tx, txName); + } + + } + + public void updateDayDate(DataSource source, String routeId) throws DataSourceException { + + String txName = "updateDayDate"; + TopiaContext tx = beginTransaction(source, txName); + try { + + RouteDAO dao = (RouteDAO) source.getDAO(tx, Route.class); + dao.updateActivitiesDate(routeId); + commitTransaction(source, tx, txName); + + } catch (Exception e) { + throw new DataSourceException(e, txName); + } finally { + closeTransaction(source, tx, txName); + } + + } + } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/Trip.java b/observe-entities/src/main/java/fr/ird/observe/entities/Trip.java index f13c146..dcb5fe9 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/Trip.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/Trip.java @@ -89,10 +89,6 @@ public interface Trip extends OpenableEntity { Program getProgram(); - Date getEndDateTheorique(); - - void updateDateFin(); - Ocean getOcean(); } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java index f422c34..71cc2c8 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineDAOImpl.java @@ -34,11 +34,14 @@ import fr.ird.observe.tripMap.TripMapPointType; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.framework.TopiaSQLQuery; +import org.nuiton.util.DateUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.Date; import java.util.List; public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAOAbstract<E> { @@ -306,4 +309,90 @@ public class TripLonglineDAOImpl<E extends TripLongline> extends TripLonglineDAO } + public boolean updateEndDate(E trip) throws TopiaException { + + boolean wasUpdated = false; + + // la date de fin theorique (date de la dernière activité de la marée) + Date theoricalEndDate = getTheoricalEndDate(trip); + + // la date de fin actuelle + Date realEndDate = trip.getEndDate(); + + if (realEndDate == null || theoricalEndDate.after(realEndDate)) { + + // on utilise la nouvelle date theorique car l'ancienne n'existe pas + // ou est antérieure à la date de fin théoriquue + trip.setEndDate(theoricalEndDate); + wasUpdated = true; + } + + return wasUpdated; + + } + + public Date getTheoricalEndDate(E trip) throws TopiaException { + + Date d; + + Timestamp lastActivityDate = TheoricalEndOfDateSqlQuery.find(context, trip.getTopiaId()); + + if (lastActivityDate==null) { + + // pas d'activité, donc la date de fin est la date de debut + d = trip.getStartDate(); + + } else { + + // date de la dernière activité de la marée + d = lastActivityDate; + + } + + // on conserve la date epuree (pas de notion de temps dans la date) + d = DateUtil.getEndOfDay(d); + return d; + + } + + private static class TheoricalEndOfDateSqlQuery extends TopiaSQLQuery<Timestamp> { + + private final String sql; + + private final String tripId; + + TheoricalEndOfDateSqlQuery(String sql, String tripId) { + this.sql = sql; + this.tripId = tripId; + } + + public static Timestamp find(TopiaContextImplementor context, String tripId) throws TopiaException { + + String sql = "SELECT max(a.timestamp)" + + " FROM observe_longline.activity a" + + " WHERE a.trip = ?"; + + TheoricalEndOfDateSqlQuery request = new TheoricalEndOfDateSqlQuery(sql, tripId); + return request.findSingleResult(context); + + } + + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + + PreparedStatement preparedStatement = connection.prepareStatement(sql); + preparedStatement.setString(1, tripId); + return preparedStatement; + + } + + @Override + protected Timestamp prepareResult(ResultSet set) throws SQLException { + + Timestamp result = set.getTimestamp(1); + return result; + + } + + } } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineImpl.java index 0506ed0..197155c 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/longline/TripLonglineImpl.java @@ -23,10 +23,7 @@ package fr.ird.observe.entities.longline; */ import fr.ird.observe.entities.OpenableEntities; -import org.nuiton.util.DateUtil; -import java.util.ArrayList; -import java.util.Date; import java.util.List; /** @@ -125,45 +122,45 @@ public class TripLonglineImpl extends TripLonglineAbstract { } - @Override - public Date getEndDateTheorique() { - Date d; - if (isActivityLonglineEmpty()) { - - // pas de route, donc la date de fin est la date de debut - d = getStartDate(); - } else { - List<ActivityLongline> routes = new ArrayList<ActivityLongline>(getActivityLongline()); - - // on trie la liste par jour d'observation - ActivityLonglines.sort(routes); - - // on recupere la derniere route de la maree - ActivityLongline route = routes.get(routes.size() - 1); - - // son jour d'observation est la date de fin de la maree - d = route.getTimeStamp(); - } - - // on conserve la date epuree (pas de notion de temps dans la date) - d = DateUtil.getEndOfDay(d); - return d; - } - - @Override - public void updateDateFin() { - - // la date de fin theorique (date de la dernière route de la marée) - Date endDate = getEndDateTheorique(); - - // la date de fin actuelle - Date realDateFin = getEndDate(); - - if (realDateFin == null || endDate.after(realDateFin)) { - - // on utilise la nouvelle date theorique car l'ancienne n'existe pas - // ou est antérieure à la date de fin théoriquue - setEndDate(endDate); - } - } +// @Override +// public Date getEndDateTheorique() { +// Date d; +// if (isActivityLonglineEmpty()) { +// +// // pas de route, donc la date de fin est la date de debut +// d = getStartDate(); +// } else { +// List<ActivityLongline> routes = new ArrayList<ActivityLongline>(getActivityLongline()); +// +// // on trie la liste par jour d'observation +// ActivityLonglines.sort(routes); +// +// // on recupere la derniere route de la maree +// ActivityLongline route = routes.get(routes.size() - 1); +// +// // son jour d'observation est la date de fin de la maree +// d = route.getTimeStamp(); +// } +// +// // on conserve la date epuree (pas de notion de temps dans la date) +// d = DateUtil.getEndOfDay(d); +// return d; +// } + +// @Override +// public void updateDateFin() { +// +// // la date de fin theorique (date de la dernière route de la marée) +// Date endDate = getEndDateTheorique(); +// +// // la date de fin actuelle +// Date realDateFin = getEndDate(); +// +// if (realDateFin == null || endDate.after(realDateFin)) { +// +// // on utilise la nouvelle date theorique car l'ancienne n'existe pas +// // ou est antérieure à la date de fin théoriquue +// setEndDate(endDate); +// } +// } } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/RouteDAOImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/RouteDAOImpl.java index 0858904..9b15ae3 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/RouteDAOImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/RouteDAOImpl.java @@ -22,11 +22,14 @@ package fr.ird.observe.entities.seine; * #L% */ +import com.google.common.base.Preconditions; +import org.hibernate.jdbc.Work; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.framework.TopiaSQLQuery; import java.sql.Connection; +import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -112,4 +115,48 @@ public class RouteDAOImpl<E extends Route> extends RouteDAOAbstract<E> { } } + /** + * To update date part of {@link SetSeine#getEndPursingTimeStamp()} and {@link SetSeine#getEndSetTimeStamp()} with + * the day date of the route. + * + * @param routeId id of the route to use + * @throws TopiaException if nay topia error + * @since 4.0 + */ + public void updateActivitiesDate(final String routeId) throws TopiaException { + + Preconditions.checkNotNull(routeId,"routeId can't be null"); + + E route = findByTopiaId(routeId); + + Preconditions.checkNotNull(route,"Could not find route this id: "+routeId); + + final Date date = new Date(route.getDate().getTime()); + + context.getHibernate().doWork(new Work() { + + @Override + public void execute(Connection connection) throws SQLException { + + String sql = "UPDATE observe_seine.SET" + + " SET ENDPURSINGTIMESTAMP = (? || ' ' || ENDPURSINGTIMESTAMP::time)::timestamp," + + " ENDSETTIMESTAMP = (? || ' ' || ENDSETTIMESTAMP::time)::timestamp" + + " WHERE TOPIAID IN " + + " (" + + " SELECT s.TOPIAID" + + " FROM observe_seine.ACTIVITY a, observe_seine.SET s" + + " WHERE a.ROUTE = ? AND a.SET = s.TOPIAID" + + " );"; + + PreparedStatement ps = connection.prepareStatement(sql); + ps.setDate(1, date); + ps.setDate(2, date); + ps.setString(3, routeId); + ps.executeUpdate(); + + } + }); + + } + } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/RouteImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/RouteImpl.java index ba2ac8d..7456fd3 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/RouteImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/RouteImpl.java @@ -263,38 +263,11 @@ public class RouteImpl extends RouteAbstract { return result; } + //TODO A supprimer du modèle uml (pas fait pour le moment pour éviter les merges inutile de modèle...) @Override + @Deprecated public void updateDates() { - if (isActivitySeineEmpty()) { - - // pas d'activity donc rien a mettre a jour - return; - } - - Date day = DateUtil.getDay(getDate()); - - for (ActivitySeine activitySeine : getActivitySeine()) { - Date time = activitySeine.getTime(); - Date fixdate = DateUtil.getDateAndTime(day, time, true, false); - activitySeine.setTime(fixdate); - SetSeine set = activitySeine.getSetSeine(); - if (set != null) { - - // mise a jour des heures de la set - - time = set.getStartTime(); - fixdate = DateUtil.getDateAndTime(day, time, true, false); - set.setStartTime(fixdate); - - time = set.getEndSetTimeStamp(); - fixdate = DateUtil.getDateAndTime(day, time, true, false); - set.setEndSetTimeStamp(fixdate); - - time = set.getEndPursingTimeStamp(); - fixdate = DateUtil.getDateAndTime(day, time, true, false); - set.setEndPursingTimeStamp(fixdate); - } - } + throw new IllegalStateException("A NE PLUS UTILISER!!!"); } protected int getLastActivityBefore(Date currentTime) { 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 2814ff2..f2bd087 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 @@ -34,6 +34,7 @@ import fr.ird.observe.tripMap.TripMapPointType; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.framework.TopiaSQLQuery; +import org.nuiton.util.DateUtil; import java.sql.Connection; import java.sql.PreparedStatement; @@ -41,6 +42,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Time; import java.util.Calendar; +import java.util.Date; import java.util.List; /** @@ -275,4 +277,92 @@ public class TripSeineDAOImpl<E extends TripSeine> extends TripSeineDAOAbstract< } + public boolean updateEndDate(E trip) throws TopiaException { + + boolean wasUpdated = false; + + // la date de fin theorique (date de la dernière activité de la marée) + Date theoricalEndDate = getTheoricalEndDate(trip); + + // la date de fin actuelle + Date realEndDate = trip.getEndDate(); + + if (realEndDate == null || theoricalEndDate.after(realEndDate)) { + + // on utilise la nouvelle date theorique car l'ancienne n'existe pas + // ou est antérieure à la date de fin théoriquue + trip.setEndDate(theoricalEndDate); + wasUpdated = true; + + } + + return wasUpdated; + + } + + public Date getTheoricalEndDate(E trip) throws TopiaException { + + Date d; + + Date lastRouteDate = TheoricalEndOfDateSqlQuery.find(context, trip.getTopiaId()); + + if (lastRouteDate == null) { + + // pas de route, donc la date de fin est la date de debut + d = trip.getStartDate(); + + } else { + + // date de la dernière route de la marée + d = lastRouteDate; + + } + + // on conserve la date epuree (pas de notion de temps dans la date) + d = DateUtil.getEndOfDay(d); + return d; + + } + + private static class TheoricalEndOfDateSqlQuery extends TopiaSQLQuery<Date> { + + private final String sql; + + private final String tripId; + + TheoricalEndOfDateSqlQuery(String sql, String tripId) { + this.sql = sql; + this.tripId = tripId; + } + + public static Date find(TopiaContextImplementor context, String tripId) throws TopiaException { + + String sql = "SELECT max(r.date)" + + " FROM observe_seine.route r" + + " WHERE r.trip = ?"; + + TheoricalEndOfDateSqlQuery request = new TheoricalEndOfDateSqlQuery(sql, tripId); + return request.findSingleResult(context); + + } + + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + + PreparedStatement preparedStatement = connection.prepareStatement(sql); + preparedStatement.setString(1, tripId); + return preparedStatement; + + } + + @Override + protected Date prepareResult(ResultSet set) throws SQLException { + + Date result = set.getDate(1); + return result; + + } + + } + } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineImpl.java index 68d0a6b..6a69931 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TripSeineImpl.java @@ -24,7 +24,6 @@ package fr.ird.observe.entities.seine; import fr.ird.observe.entities.OpenableEntities; import org.nuiton.util.DateUtil; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -106,46 +105,55 @@ public class TripSeineImpl extends TripSeineAbstract { return getRoute().get(sizeRoute() - 1); } + //TODO A supprimer du modèle uml (pas fait pour le moment pour éviter les merges inutile de modèle...) @Override + @Deprecated public Date getEndDateTheorique() { - Date d; - if (isRouteEmpty()) { - - // pas de route, donc la date de fin est la date de debut - d = getStartDate(); - } else { - List<Route> routes = new ArrayList<Route>(getRoute()); - - // on trie la liste par jour d'observation - Routes.sort(routes); - - // on recupere la derniere route de la maree - Route route = routes.get(routes.size() - 1); - - // son jour d'observation est la date de fin de la maree - d = route.getDate(); - } - // on conserve la date epuree (pas de notion de temps dans la date) - d = DateUtil.getEndOfDay(d); - return d; + throw new IllegalStateException("A NE PLUS UTILISER!!!"); + +// Date d; +// if (isRouteEmpty()) { +// +// // pas de route, donc la date de fin est la date de debut +// d = getStartDate(); +// } else { +// List<Route> routes = new ArrayList<Route>(getRoute()); +// +// // on trie la liste par jour d'observation +// Routes.sort(routes); +// +// // on recupere la derniere route de la maree +// Route route = routes.get(routes.size() - 1); +// +// // son jour d'observation est la date de fin de la maree +// d = route.getDate(); +// } +// +// // on conserve la date epuree (pas de notion de temps dans la date) +// d = DateUtil.getEndOfDay(d); +// return d; } + //TODO A supprimer du modèle uml (pas fait pour le moment pour éviter les merges inutile de modèle...) @Override + @Deprecated public void updateDateFin() { - // la date de fin theorique (date de la dernière route de la marée) - Date endDate = getEndDateTheorique(); - - // la date de fin actuelle - Date realDateFin = getEndDate(); - - if (realDateFin == null || endDate.after(realDateFin)) { - - // on utilise la nouvelle date theorique car l'ancienne n'existe pas - // ou est antérieure à la date de fin théoriquue - setEndDate(endDate); - } + throw new IllegalStateException("A NE PLUS UTILISER!!!"); + +// // la date de fin theorique (date de la dernière route de la marée) +// Date endDate = getEndDateTheorique(); +// +// // la date de fin actuelle +// Date realDateFin = getEndDate(); +// +// if (realDateFin == null || endDate.after(realDateFin)) { +// +// // on utilise la nouvelle date theorique car l'ancienne n'existe pas +// // ou est antérieure à la date de fin théoriquue +// setEndDate(endDate); +// } } @Override diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java index b41a7c2..ea04a32 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java @@ -24,8 +24,10 @@ package fr.ird.observe.ui.content.open.impl.longline; import fr.ird.observe.DataService; import fr.ird.observe.ObserveDAOHelper; +import fr.ird.observe.ObserveTechnicalException; import fr.ird.observe.db.DataContext; import fr.ird.observe.db.DataSource; +import fr.ird.observe.db.DataSourceException; import fr.ird.observe.db.constants.DataContextType; import fr.ird.observe.db.util.TopiaExecutor2; import fr.ird.observe.entities.longline.ActivityLongline; @@ -33,6 +35,8 @@ import fr.ird.observe.entities.longline.TripLongline; import fr.ird.observe.ui.content.ContentMode; import fr.ird.observe.ui.content.ContentUIModel; import fr.ird.observe.ui.content.open.ContentOpenableUIHandler; +import fr.ird.observe.ui.tree.ObserveNode; +import fr.ird.observe.ui.tree.ObserveTreeHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; @@ -265,18 +269,20 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity } boolean create = bean.getTopiaId() == null; - String routeId = getSelectedParentId(); + String tripId = getSelectedParentId(); bean.setOpen(true); if (create) { - bean = dataService.create(dataSource, routeId, bean, binder, getCreateExecutor()); + bean = dataService.create(dataSource, tripId, bean, binder, getCreateExecutor()); } else { - dataService.update(dataSource, routeId, bean, getUpdateExecutor()); + dataService.update(dataSource, tripId, bean, getUpdateExecutor()); } + updateTripEndDate(tripId); + obtainChildPosition(bean, dataService, dataSource); return true; @@ -328,6 +334,8 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity if (log.isInfoEnabled()) { log.info("Delete done for Activity " + bean.getTopiaId()); } + + updateTripEndDate(tripId); return true; } @@ -340,6 +348,18 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity } @Override + protected void afterSave(boolean refresh) { + super.afterSave(refresh); + repaintTripNode(); + } + + @Override + protected void afterDelete() { + super.afterDelete(); + repaintTripNode(); + } + + @Override protected boolean obtainCanReopen(boolean create) { DataContext dataContext = getDataContext(); @@ -353,4 +373,50 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity return canReopen; } + public static final String UPDATE_MAREE_NODE = "updateTripNode"; + + protected void updateTripEndDate(String tripId) { + + boolean wasUpdated; + + // on met a jour si necessaire la date de fin de la maree + try { + wasUpdated = getDataService().updateEndDate(getDataSource(), tripId); + + } catch (DataSourceException e) { + throw new ObserveTechnicalException("Could not update end date",e); + } + + if (wasUpdated) { + + // la date de fin a ete modifiee, il faut : redessiner le noeud de la maree le repositionner + getUi().setContextValue(Boolean.TRUE, UPDATE_MAREE_NODE); + + } else { + + getUi().removeContextValue(Boolean.class, UPDATE_MAREE_NODE); + + } + + } + + protected void repaintTripNode() { + + Boolean updateTripNode = getUi().getContextValue(Boolean.class, UPDATE_MAREE_NODE); + + getUi().removeContextValue(Boolean.class, UPDATE_MAREE_NODE); + + if (updateTripNode == null || !updateTripNode) { + return; + } + + ObserveTreeHelper treeHelper = getTreeHelper(getUi()); + ObserveNode tripNode = treeHelper.getSelectedNode().getParent().getParent(); + if (log.isInfoEnabled()) { + log.info("Refresh trip node : " + tripNode); + } + treeHelper.reloadNode(tripNode, false); + + } + } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java index 953744e..f8aa6a6 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java @@ -273,8 +273,6 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline } bean.setStartDate(startDate); - // mise a jour de la date de fin - bean.updateDateFin(); Date endDate = bean.getEndDate(); if (log.isDebugEnabled()) { log.debug("endDate = " + endDate); @@ -292,6 +290,9 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline } + // mise a jour de la date de fin + dataService.updateEndDate(dataSource, bean.getTopiaId()); + // recuperation de la position de la maree dans le program obtainChildPosition(bean, dataService, dataSource); diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java index a2d8cd4..6bea404 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java @@ -24,8 +24,10 @@ package fr.ird.observe.ui.content.open.impl.seine; import fr.ird.observe.DataService; import fr.ird.observe.ObserveContext; import fr.ird.observe.ObserveDAOHelper; +import fr.ird.observe.ObserveTechnicalException; import fr.ird.observe.db.DataContext; import fr.ird.observe.db.DataSource; +import fr.ird.observe.db.DataSourceException; import fr.ird.observe.db.constants.DataContextType; import fr.ird.observe.db.util.TopiaExecutor2; import fr.ird.observe.entities.referentiel.seine.VesselActivitySeine; @@ -236,7 +238,7 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { DataSource dataSource, TopiaEntityBinder<Route> binder) throws Exception { - String mareeId = getSelectedParentId(); + String tripId = getSelectedParentId(); if (log.isInfoEnabled()) { log.info("will save route " + bean.getTopiaId()); @@ -249,12 +251,20 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { if (bean.getTopiaId() == null) { - dataService.create(dataSource, mareeId, bean, binder, getCreateExecutor()); + dataService.create(dataSource, tripId, bean, binder, getCreateExecutor()); } else { - dataService.update(dataSource, mareeId, bean, getUpdateExecutor()); + dataService.update(dataSource, tripId, bean, getUpdateExecutor()); + + if( dateHasChanged) { + + dataService.updateDayDate(dataSource, bean.getTopiaId()); + + } } + updateTripEndDate(tripId); + obtainChildPosition(bean, dataService, dataSource); return true; @@ -288,17 +298,14 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { // mettre la date de fin de la maree beanToSave.setDate(editBean.getDate()); - // on met a jour si necessaire la date de fin de la maree - updateDateFin(parentBean); - return beanToSave; } + boolean dateHasChanged; + @Override protected Route onUpdate(TopiaContext tx, Object parent, Route beanToSave) throws TopiaException { - TripSeine parentBean = (TripSeine) parent; - Route editBean = getBean(); // on conserve l'ancienne date d'observation @@ -307,15 +314,8 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { // recopie des propriétés vers le bean a sauver getLoadBinder().copyExcluding(editBean, beanToSave, Route.PROPERTY_ACTIVITY_SEINE); - if (!oldDate.equals(editBean.getDate())) { - - // le jour a change, il faut mettre à jour les dates des activitys - // et des sets - beanToSave.updateDates(); - } - - // on met a jour si necessaire la date de fin de la maree - updateDateFin(parentBean); + // si le jour a change, il faut mettre à jour les dates des activitéset des sets + dateHasChanged = !oldDate.equals(editBean.getDate()); return beanToSave; } @@ -333,11 +333,13 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { log.info("Will delete Route " + bean.getTopiaId()); } - String mareeId = getSelectedParentId(); - dataService.delete(dataSource, mareeId, bean, deletor); + String tripId = getSelectedParentId(); + dataService.delete(dataSource, tripId, bean, deletor); if (log.isInfoEnabled()) { log.info("Delete done for Route " + bean.getTopiaId()); } + updateTripEndDate(tripId); + return true; } @@ -348,8 +350,6 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { // suppression de la route parentBean.removeRoute(beanToDelete); - // mise à jour de la date de fin de marée - updateDateFin(parentBean); } @Override @@ -525,21 +525,29 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { // treeHelper.refreshNode(tripNode, false); } - protected void updateDateFin(TripSeine parentBean) { - Date endDate = parentBean.getEndDate(); + protected void updateTripEndDate(String tripId) { + + boolean wasUpdated; // on met a jour si necessaire la date de fin de la maree - parentBean.updateDateFin(); + try { + wasUpdated = getDataService().updateEndDate(getDataSource(), tripId); - if (!endDate.equals(parentBean.getEndDate())) { + } catch (DataSourceException e) { + throw new ObserveTechnicalException("Could not update end date",e); + } + + if (wasUpdated) { - // la date de fin a ete modifiee, il faut : - // redessiner le noeud de la maree - // le repositionner + // la date de fin a ete modifiee, il faut : redessiner le noeud de la maree le repositionner getUi().setContextValue(Boolean.TRUE, UPDATE_MAREE_NODE); + } else { + getUi().removeContextValue(Boolean.class, UPDATE_MAREE_NODE); + } + } } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java index bb8c887..cbf9dba 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java @@ -273,8 +273,6 @@ public class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeine> { } bean.setStartDate(startDate); - // mise a jour de la date de fin - bean.updateDateFin(); Date endDate = bean.getEndDate(); if (log.isDebugEnabled()) { log.debug("endDate = " + endDate); @@ -292,6 +290,9 @@ public class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeine> { } + // mise a jour de la date de fin + dataService.updateEndDate(dataSource, bean.getTopiaId()); + // recuperation de la position de la maree dans le program obtainChildPosition(bean, dataService, dataSource); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.