branch develop updated (d80bebc -> feb42a7)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository observe. See http://git.codelutin.com/observe.git from d80bebc fixes #7074: Problème de lancement de calcul avec la jdk 8 Merge branch 'feature/7074' into develop new feb42a7 utilisation de requetes spécifique pour les mises à jour plutôt que de charger la base via hibernate (refs #7135) The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 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) Summary of changes: .../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(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 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>.
participants (1)
-
codelutin.com scm