r503 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence
Author: fdesbois Date: 2012-09-01 11:51:00 +0200 (Sat, 01 Sep 2012) New Revision: 503 Url: http://forge.codelutin.com/repositories/revision/sammoa/503 Log: fixes #1429 : resolve issue on delete flight + improve AutoSave when creation error Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/AutoSaveListener.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-09-01 09:50:23 UTC (rev 502) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-09-01 09:51:00 UTC (rev 503) @@ -362,9 +362,6 @@ Set<ObserverPosition> positions = Sets.newHashSet(); - // keep observerPositions to delete from transectFlights - positions.addAll(TransectFlights.toObserverPositions(flight.getTransectFlight())); - // delete routes List<Route> routes = getRoutes(tx, flight); // keep observerPositions to delete from routes @@ -374,18 +371,19 @@ // delete observations List<Observation> observations = getObservations(tx, flight); - // keep observerPositions to delete -// positions.addAll(Observations.toObserverPositions(observations)); ObservationDAO observationDAO = SammoaDAOHelper.getObservationDAO(tx); observationDAO.deleteAll(observations); - // delete observationPositions - ObserverPositionDAO observerPositionDAO = SammoaDAOHelper.getObserverPositionDAO(tx); - observerPositionDAO.deleteAll(positions); + // keep observerPositions to delete from transectFlights + positions.addAll(TransectFlights.toObserverPositions(flight.getTransectFlight())); - // delete flight + // delete flight (cascade delete on transectFlights) dao.delete(flight); + // delete observerPositions + ObserverPositionDAO observerPositionDAO = SammoaDAOHelper.getObserverPositionDAO(tx); + observerPositionDAO.deleteAll(positions); + } catch (TopiaException e) { throw new SammoaTechnicalException(e); } Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/AutoSaveListener.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/AutoSaveListener.java 2012-09-01 09:50:23 UTC (rev 502) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/AutoSaveListener.java 2012-09-01 09:51:00 UTC (rev 503) @@ -145,10 +145,14 @@ TopiaContext transaction = persistence.openContext(); try { - saveEntities(transaction, createdEntities, CREATE_ACTION); + Set<TopiaEntity> errorSavedEntities = + saveEntities(transaction, createdEntities, CREATE_ACTION); - saveEntities(transaction, changedEntities, UPDATE_ACTION); + changedEntities.addAll( + saveEntities(transaction, changedEntities, UPDATE_ACTION)); + changedEntities.addAll(errorSavedEntities); + } finally { persistence.closeContext(transaction); } @@ -174,13 +178,15 @@ * @param transaction TopiaContex used to commit * @param entities synchronized Set of entities to save * @param action SaveAction to use + * @return a Set of entities in error during save */ - protected void saveEntities(TopiaContext transaction, - Set<TopiaEntity> entities, - SaveAction action) { + protected Set<TopiaEntity> saveEntities(TopiaContext transaction, + Set<TopiaEntity> entities, + SaveAction action) { + Set<TopiaEntity> result; if (entities.isEmpty()) { - // do nothing + result = Collections.emptySet(); } else { @@ -199,18 +205,21 @@ transaction.commitTransaction(); + result = Collections.emptySet(); + } catch (TopiaException e) { if (logger.isErrorEnabled()) { logger.error(String.format("Error during %s", action), e); } - entities.addAll(entitiesCopy); + result = entitiesCopy; } if (logger.isDebugEnabled() && !entitiesCopy.isEmpty()) { logger.debug(String.format("%s %d entities", action, entitiesCopy.size())); } } + return result; } protected interface SaveAction {
participants (1)
-
fdesbois@users.forge.codelutin.com