Author: tchemit Date: 2012-08-18 14:44:43 +0200 (Sat, 18 Aug 2012) New Revision: 433 Url: http://forge.codelutin.com/repositories/revision/sammoa/433 Log: clean codes (review result local variable scope) refs #1201: Export format application (export should be ok), still need to perform the callback treatment hide as much as possible SammoaPersistence in service make FlightController a Sammoaservice Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightController.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorages.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/ImportCsvService.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/ObserverImportModel.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/SpeciesImportModel.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/ImportMapService.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/StrateImportModel.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/TransectImportModel.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationModel.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationService.java trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/FlightServiceTest.java trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/io/input/csv/ImportCsvServiceTest.java trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/output/map/ExportMapServiceTest.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/io/output/map/ExportMapUIHandler.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUIHandler.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUIModel.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-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-18 12:44:43 UTC (rev 433) @@ -57,6 +57,7 @@ import fr.ulr.sammoa.persistence.TransectDAO; import fr.ulr.sammoa.persistence.TransectFlight; import fr.ulr.sammoa.persistence.TransectFlightDAO; +import org.apache.commons.collections.CollectionUtils; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaRuntimeException; @@ -97,40 +98,39 @@ long start = TimeLog.getTime(); - List<Flight> result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { FlightDAO dao = SammoaDAOHelper.getFlightDAO(transaction); - result = dao.findAllByCampaign(campaign); + List<Flight> result = dao.findAllByCampaign(campaign); Collections.sort(result, Flights.onDate()); + timeLog.log(start, "getFlights(" + campaign.getCode() + ")"); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - - timeLog.log(start, "getFlights(" + campaign.getCode() + ")"); - - return result; } public Iterable<Flight> getFlights(Campaign campaign, Date beginDate, Date endDate) { - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { - Iterable<Flight> result = getFlights(transaction, campaign, beginDate, endDate); + Iterable<Flight> result = getFlights(transaction, + campaign, + beginDate, + endDate); return result; - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } @@ -165,7 +165,8 @@ @Override public boolean apply(Flight input) { - return period.between(input.getBeginDate()); + return input.getBeginDate() != null && + period.between(input.getBeginDate()); } }); @@ -177,18 +178,27 @@ public Flight getFlight(String flightId) { Preconditions.checkNotNull(flightId); - long start = TimeLog.getTime(); - Flight result; + TopiaContext transaction = beginTransaction(); + try { + Flight result = getFlight(transaction, flightId); + return result; + } finally { + endTransaction(transaction); + } + } - TopiaContext transaction = persistence.beginTransaction(); + public Flight getFlight(TopiaContext transaction, String flightId) { + + Preconditions.checkNotNull(flightId); + try { + long start = TimeLog.getTime(); FlightDAO dao = SammoaDAOHelper.getFlightDAO(transaction); - result = dao.findByTopiaId(flightId); - Preconditions.checkArgument( - result != null, - String.format("%s doesn't exist", flightId)); + Flight result = dao.findByTopiaId(flightId); + Preconditions.checkNotNull( + result, String.format("%s doesn't exist", flightId)); if (logger.isInfoEnabled()) { logger.info("Loading flight {} [{}]", @@ -200,16 +210,12 @@ result.sizeObserver(); result.sizeTransectFlight(); + timeLog.log(start, "getFlight(" + flightId + ")"); + + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); - - } finally { - persistence.endTransaction(transaction); } - - timeLog.log(start, "getFlight(" + flightId + ")"); - - return result; } /** @@ -219,21 +225,21 @@ * * @param campaign The campaign of the flight * @return a new flight - * @see FlightDAO#getLastFlightNumber(int) + * @see FlightDAO#findLastFlightNumber(int) * @since 0.4 */ public Flight createFlight(Campaign campaign) { Flight result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { FlightDAO dao = SammoaDAOHelper.getFlightDAO(transaction); String systemId = config.getSystemId(); int startNumber = config.getFlightNumber(); - int flightNumber = dao.getLastFlightNumber(startNumber); + int flightNumber = dao.findLastFlightNumber(startNumber); result = dao.createByNaturalId(systemId, flightNumber, campaign); result.setPlatformType(PlatformType.SIMPLE); @@ -251,7 +257,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } // create flight storage @@ -296,32 +302,26 @@ public List<GeoPoint> getFlightGeoPoints(Flight flight) { - - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { List<GeoPoint> result = getFlightGeoPoints(transaction, flight); return result; } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - } public List<GeoPoint> getFlightGeoPoints(TopiaContext transaction, Flight flight) { - List<GeoPoint> result; - try { GeoPointDAO dao = SammoaDAOHelper.getGeoPointDAO(transaction); - - result = dao.findAllByFlightOrderedByRecordTime(flight); - + List<GeoPoint> result = + dao.findAllByFlightOrderedByRecordTime(flight); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } - return result; } // @@ -378,7 +378,7 @@ List<TransectFlight> result = Lists.newArrayList(); - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { FlightDAO flightDAO = SammoaDAOHelper.getFlightDAO(transaction); @@ -409,7 +409,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } Collections.reverse(result); return result; @@ -417,26 +417,25 @@ public Map<Transect, Long> getTransectRealNbTimes(Collection<Transect> transects) { - Map<Transect, Long> result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { TransectFlightDAO dao = SammoaDAOHelper.getTransectFlightDAO(transaction); - if (transects == null || transects.isEmpty()) { + Map<Transect, Long> result; + if (CollectionUtils.isEmpty(transects)) { result = dao.countAllByTransect(); } else { result = dao.countAllByTransects(transects); } - + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } /** @@ -447,13 +446,12 @@ */ public List<Route> getRoutes(Flight flight) { - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { List<Route> result = getRoutes(transaction, flight); - return result; } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } @@ -465,18 +463,14 @@ */ public List<Route> getRoutes(TopiaContext transaction, Flight flight) { - List<Route> result; try { - RouteDAO dao = SammoaDAOHelper.getRouteDAO(transaction); - - result = dao.findAllByFlightOrderedByBeginTime(flight); - + List<Route> result = dao.findAllByFlightOrderedByBeginTime(flight); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); } - return result; } /** @@ -487,85 +481,71 @@ */ public Route getLastRoute(Flight flight) { - Route result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { - RouteDAO dao = SammoaDAOHelper.getRouteDAO(transaction); - - result = dao.findLastByFlight(flight); - + Route result = dao.findLastByFlight(flight); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } public TransectFlight getLastTransectDone(Flight flight) { - TransectFlight result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { RouteDAO dao = SammoaDAOHelper.getRouteDAO(transaction); - Route route = dao.findLastByFlightAndType(flight, RouteType.LEG); - if (route != null) { - result = route.getTransectFlight(); - - } else { - result = null; - } - + TransectFlight result = route == null ? null : route.getTransectFlight(); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } public List<Observation> getObservations(Flight flight) { - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { List<Observation> result = getObservations(transaction, flight); return result; } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } public List<Observation> getObservations(TopiaContext transaction, Flight flight) { - List<Observation> result; try { - ObservationDAO dao = SammoaDAOHelper.getObservationDAO(transaction); + List<Observation> result = + dao.findAllByFlightOrderedByObservationTime(flight); + return result; - result = dao.findAllByFlightOrderedByObservationTime(flight); - } catch (TopiaException e) { throw new TopiaRuntimeException(e); } - return result; } public void setRouteObserverByPosition(Route route, Observer observer, Position position) { - Collection<ObserverPosition> observerPositions = - route.getObserverPosition(); - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { + Collection<ObserverPosition> observerPositions = + route.getObserverPosition(); ObserverPositionDAO observerPositionDAO = SammoaDAOHelper.getObserverPositionDAO(transaction); @@ -610,7 +590,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } @@ -653,7 +633,7 @@ ObservationDAO dao = SammoaDAOHelper.getObservationDAO(transaction); - int number = dao.getLastObservationNumber(flight); + int number = dao.findLastObservationNumber(flight); result = dao.createByNaturalId(number, flight); result.setObservationTime(beginTime); Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java 2012-08-18 12:44:43 UTC (rev 433) @@ -58,13 +58,12 @@ public List<Region> getRegions() { - List<Region> result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { RegionDAO dao = SammoaDAOHelper.getRegionDAO(transaction); - result = dao.findAll(); + List<Region> result = dao.findAll(); if (result.isEmpty()) { Region region = dao.createByNaturalId("FR-METRO"); @@ -73,27 +72,26 @@ result = Lists.newArrayList(region); } + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } public String saveRegion(Region region) { - Preconditions.checkArgument(region != null); - Preconditions.checkArgument(region.getCode() != null); + Preconditions.checkNotNull(region); + Preconditions.checkNotNull(region.getCode()); - String result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { RegionDAO dao = SammoaDAOHelper.getRegionDAO(transaction); + String result; if (region.getTopiaId() == null) { Region existRegion = dao.findByNaturalId(region.getCode()); @@ -115,48 +113,44 @@ transaction.commitTransaction(); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } public List<Campaign> getCampaigns() { - List<Campaign> result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(transaction); - - result = dao.findAllWithOrder(Campaign.PROPERTY_BEGIN_DATE + " DESC"); - + List<Campaign> result = + dao.findAllWithOrder(Campaign.PROPERTY_BEGIN_DATE + " DESC"); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } public String saveCampaign(Campaign campaign) { - Preconditions.checkArgument(campaign != null); - Preconditions.checkArgument(campaign.getBeginDate() != null); - Preconditions.checkArgument(campaign.getEndDate() != null); + Preconditions.checkNotNull(campaign); + Preconditions.checkNotNull(campaign.getBeginDate()); + Preconditions.checkNotNull(campaign.getEndDate()); Preconditions.checkArgument(campaign.getEndDate().after(campaign.getBeginDate())); - Preconditions.checkArgument(campaign.getCode() != null); - Preconditions.checkArgument(campaign.getRegion() != null); + Preconditions.checkNotNull(campaign.getCode()); + Preconditions.checkNotNull(campaign.getRegion()); boolean createCampaign = campaign.getTopiaId() == null; String result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(transaction); @@ -189,9 +183,8 @@ } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } if (createCampaign) { @@ -210,26 +203,21 @@ public Campaign getCampaign(String topiaId) { - Campaign result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { - CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(transaction); - - result = dao.findByTopiaId(topiaId); - + Campaign result = dao.findByTopiaId(topiaId); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } public List<Transect> getAllTransects(Campaign campaign) { - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { TransectDAO dao = SammoaDAOHelper.getTransectDAO(transaction); @@ -239,14 +227,13 @@ return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } public List<Strate> getAllStrates(Campaign campaign) { - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { StrateDAO dao = SammoaDAOHelper.getStrateDAO(transaction); @@ -257,14 +244,13 @@ } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } public List<Species> getAllSpecies(Campaign campaign) { - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { SpeciesDAO dao = SammoaDAOHelper.getSpeciesDAO(transaction); @@ -275,14 +261,13 @@ } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } public Collection<Species> getAllValidSpecies() { - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { SpeciesDAO dao = SammoaDAOHelper.getSpeciesDAO(transaction); @@ -292,21 +277,19 @@ } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } public String createTransect(Transect transect) { - Preconditions.checkArgument(transect != null); - Preconditions.checkArgument(transect.getName() != null); - Preconditions.checkArgument(transect.getStrate() != null); + Preconditions.checkNotNull(transect); + Preconditions.checkNotNull(transect.getName()); + Preconditions.checkNotNull(transect.getStrate()); - String result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { TransectDAO dao = SammoaDAOHelper.getTransectDAO(transaction); @@ -319,62 +302,54 @@ transect.getStrate()); newTransect.setLocalCreation(true); - result = newTransect.getTopiaId(); - transaction.commitTransaction(); + String result = newTransect.getTopiaId(); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } public Transect getTransect(String transectId) { - Transect result; - - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { TransectDAO dao = SammoaDAOHelper.getTransectDAO(transaction); - result = dao.findByTopiaId(transectId); - + Transect result = dao.findByTopiaId(transectId); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } public List<Observer> getAllObservers(Campaign campaign) { - List<Observer> result; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { ObserverDAO observerDAO = SammoaDAOHelper.getObserverDAO(transaction); - result = observerDAO.findAllByCampaign(campaign); + List<Observer> result = observerDAO.findAllByCampaign(campaign); Collections.sort(result, Observers.onInitials()); // realy creating observers transaction.commitTransaction(); + + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); - } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - - return result; } - } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-18 12:44:43 UTC (rev 433) @@ -54,7 +54,8 @@ */ public abstract class BaseGpsHandler implements GpsHandler { - private static final Logger logger = LoggerFactory.getLogger(BaseGpsHandler.class); + private static final Logger logger = + LoggerFactory.getLogger(BaseGpsHandler.class); protected Set<DeviceStateListener> deviceStateListeners; Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightController.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightController.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightController.java 2012-08-18 12:44:43 UTC (rev 433) @@ -23,11 +23,13 @@ * #L% */ +import fr.ulr.sammoa.application.SammoaService; import fr.ulr.sammoa.application.device.DeviceTechnicalException; import fr.ulr.sammoa.application.device.audio.AudioRecorder; import fr.ulr.sammoa.application.device.audio.AudioRecorderDefault; import fr.ulr.sammoa.application.device.gps.GpsConfig; import fr.ulr.sammoa.application.device.gps.GpsHandler; +import fr.ulr.sammoa.persistence.Flight; import fr.ulr.sammoa.persistence.GeoPoint; import fr.ulr.sammoa.persistence.Observation; import fr.ulr.sammoa.persistence.ObservationStatus; @@ -47,7 +49,7 @@ * @author fdesbois <desbois@codelutin.com> * @see FlightState */ -public interface FlightController { +public interface FlightController extends SammoaService { /** @return the {@link FlightState} */ FlightState getState(); @@ -83,8 +85,10 @@ * recording if necessary. * <p/> * You must call init method to ensure the {@link FlightState}. + * + * @param flight flight to use in the controller */ - void init(); + void init(Flight flight); /** * Start operation. This will set the {@code beginDate} of the flight, then 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-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java 2012-08-18 12:44:43 UTC (rev 433) @@ -29,7 +29,7 @@ import com.google.common.base.Throwables; import com.google.common.collect.Sets; import fr.ulr.sammoa.application.FlightService; -import fr.ulr.sammoa.application.SammoaContext; +import fr.ulr.sammoa.application.SammoaServiceSupport; import fr.ulr.sammoa.application.device.DeviceManager; import fr.ulr.sammoa.application.device.DeviceStateListener; import fr.ulr.sammoa.application.device.DeviceTechnicalException; @@ -56,7 +56,6 @@ import fr.ulr.sammoa.persistence.Route; import fr.ulr.sammoa.persistence.RouteType; import fr.ulr.sammoa.persistence.SammoaDAOHelper; -import fr.ulr.sammoa.persistence.SammoaPersistence; import fr.ulr.sammoa.persistence.TransectFlight; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; @@ -76,16 +75,12 @@ * * @author fdesbois <desbois@codelutin.com> */ -public class FlightControllerDefault implements GpsLocationListener, FlightController { +public class FlightControllerDefault extends SammoaServiceSupport implements GpsLocationListener, FlightController { private static final Logger logger = LoggerFactory.getLogger(FlightControllerDefault.class); private static final TimeLog timeLog = new TimeLog(FlightControllerDefault.class, 500, 1000); - protected SammoaContext context; - - protected SammoaPersistence persistence; - protected FlightService service; protected AudioRecorder audioRecorder; @@ -104,30 +99,12 @@ protected TransectFlight lastTransect; - protected Set<FlightControllerListener> listeners; + protected Set<FlightControllerListener> listeners = Sets.newHashSet(); protected FlightStorage flightStorage; // protected GeoPoint lastLocation; - public FlightControllerDefault(SammoaContext context, Flight flight) { - - this.context = context; - this.flight = flight; - - this.persistence = context.getPersistence(); - this.service = context.newService(FlightService.class); - - this.currentRoute = service.getLastRoute(flight); - this.lastTransect = service.getLastTransectDone(flight); - this.listeners = Sets.newHashSet(); - - Campaign campaign = flight.getCampaign(); - CampaignStorage campaignStorage = CampaignStorages.getStorage( - context.getConfig(), campaign.getTopiaId()); - flightStorage = campaignStorage.getFlightStorage(flight.getTopiaId()); - } - @Override public void addListener(FlightControllerListener listener) { listeners.add(listener); @@ -262,14 +239,29 @@ } @Override - public void init() { + public void init(Flight flight) { + Preconditions.checkNotNull(flight); + Preconditions.checkState(gpsHandler != null, "The GpsHandler must be created using #openGpsDevice"); Preconditions.checkState(audioRecorder != null, "The AudioRecorder must be created using #openAudioDevice"); + this.flight = flight; + + this.service = context.newService(FlightService.class); + + this.currentRoute = service.getLastRoute(flight); + this.lastTransect = service.getLastTransectDone(flight); + this.listeners = Sets.newHashSet(); + + Campaign campaign = flight.getCampaign(); + CampaignStorage campaignStorage = CampaignStorages.getStorage( + context.getConfig(), campaign.getTopiaId()); + flightStorage = campaignStorage.getFlightStorage(flight.getTopiaId()); + if (initialized) { if (logger.isWarnEnabled()) { logger.warn("The FlightController is already initialized"); @@ -279,7 +271,7 @@ if (logger.isInfoEnabled()) { logger.info("Initialize the FlightController for flight {}", - flight.getFlightNumber()); + this.flight.getFlightNumber()); } initialized = true; @@ -292,12 +284,12 @@ state = FlightState.ON_EFFORT; } else if (currentRoute != null - && flight.getBeginDate() != null - && flight.getEndDate() == null) { + && this.flight.getBeginDate() != null + && this.flight.getEndDate() == null) { state = FlightState.OFF_EFFORT; - } else if (flight.getEndDate() != null) { + } else if (this.flight.getEndDate() != null) { state = FlightState.ENDED; @@ -316,7 +308,7 @@ nextTransect = lastTransect; } else { - nextTransect = flight.getNextTransectFlightFrom(lastTransect); + nextTransect = this.flight.getNextTransectFlightFrom(lastTransect); } // Restart recording audio if onEffort or circleBack @@ -343,7 +335,7 @@ audioRecorder.start(); - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { Date currentDate = saveGPS(transaction, gpsHandler.getCurrentLocation(), flight); @@ -380,7 +372,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } @@ -418,7 +410,7 @@ nextTransect != null, "You can't call begin() if no transect is selected. " + "Call setNextTransect() method first"); - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { Date currentDate = saveGPS(transaction, gpsHandler.getCurrentLocation(), flight); @@ -455,7 +447,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } @@ -473,7 +465,7 @@ "You can't call circleBack() during TRANSIT"); - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { Date currentDate = saveGPS(transaction, gpsHandler.getCurrentLocation(), flight); @@ -509,7 +501,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } @@ -524,7 +516,7 @@ Preconditions.checkState( isOnEffort(), "You can call add() only if flight is on effort (started, not ended, on effort)"); - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { Date currentDate = saveGPS(transaction, gpsHandler.getCurrentLocation(), flight); @@ -550,7 +542,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } @@ -579,7 +571,7 @@ Preconditions.checkState( isRunning(), "You can call observation() only if flight is running (started, not ended)"); - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { GeoPoint location = gpsHandler.getCurrentLocation(); @@ -617,7 +609,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } @@ -643,7 +635,7 @@ Preconditions.checkState( isOffEffort(), "You can call stop() only if flight is running (started, not ended, not on effort)"); - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { Date currentDate = saveGPS(transaction, gpsHandler.getCurrentLocation(), flight); @@ -682,7 +674,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } @@ -706,7 +698,7 @@ Preconditions.checkState( isOnEffort(), "You can call end() only if flight is on effort (started, not ended, on effort)"); - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { Date currentDate = saveGPS(transaction, gpsHandler.getCurrentLocation(), flight); @@ -731,7 +723,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java 2012-08-18 12:44:43 UTC (rev 433) @@ -117,7 +117,9 @@ } public Iterable<FlightStorage> getFlightStorages() { - File[] files = getFlightDirectory().listFiles((FileFilter) DirectoryFileFilter.DIRECTORY); - return Iterables.transform(Lists.newArrayList(files), FILE_FLIGHT_STORAGE_FUNCTION); + File[] files = getFlightDirectory().listFiles( + (FileFilter) DirectoryFileFilter.DIRECTORY); + return Iterables.transform(Lists.newArrayList(files), + FILE_FLIGHT_STORAGE_FUNCTION); } } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorages.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorages.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorages.java 2012-08-18 12:44:43 UTC (rev 433) @@ -37,7 +37,6 @@ */ public class CampaignStorages { - public static CampaignStorage getStorage(SammoaConfig config, String campaignId) { File directory = config.getCampaignDirectory(); Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/ImportCsvService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/ImportCsvService.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/ImportCsvService.java 2012-08-18 12:44:43 UTC (rev 433) @@ -62,11 +62,10 @@ public int importSpecies(String regionId, File file) throws IOException { Reader reader = Files.newReader(file, Charsets.UTF_8); - try { int result = 0; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { RegionDAO regionDAO = SammoaDAOHelper.getRegionDAO(transaction); @@ -95,7 +94,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } reader.close(); return result; @@ -104,55 +103,13 @@ } } - protected boolean importSpecies(SpeciesDAO dao, - Species species, - String regionCode) throws TopiaException { - // while importing a species, it does become valid - species.setLocalCreation(false); - - Species speciesExists = - dao.findByNaturalId(species.getCode(), - species.getRegion()); - - boolean newSpecies = false; - if (speciesExists == null) { - - dao.create(species); - - newSpecies = true; - - if (logger.isDebugEnabled()) { - logger.debug( - "Create new species {} for region {}", - species.getCode(), regionCode); - } - - } else { - - speciesExists.setCommonName(species.getCommonName()); - speciesExists.setLatinName(species.getLatinName()); - speciesExists.setGroupName(species.getGroupName()); - speciesExists.setFamily(species.getFamily()); - speciesExists.setType(species.getType()); - dao.update(speciesExists); - - if (logger.isInfoEnabled()) { - logger.info( - "The species {} already exists and is updated", - species.getCode()); - } - } - - return newSpecies; - } - public int importObservers(String campaignId, File file) throws IOException { Reader reader = Files.newReader(file, Charsets.UTF_8); try { int result = 0; - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { CampaignDAO campaignDAO = SammoaDAOHelper.getCampaignDAO(transaction); @@ -181,7 +138,7 @@ throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } reader.close(); return result; @@ -190,6 +147,48 @@ } } + protected boolean importSpecies(SpeciesDAO dao, + Species species, + String regionCode) throws TopiaException { + // while importing a species, it does become valid + species.setLocalCreation(false); + + Species speciesExists = + dao.findByNaturalId(species.getCode(), + species.getRegion()); + + boolean newSpecies = false; + if (speciesExists == null) { + + dao.create(species); + + newSpecies = true; + + if (logger.isDebugEnabled()) { + logger.debug( + "Create new species {} for region {}", + species.getCode(), regionCode); + } + + } else { + + speciesExists.setCommonName(species.getCommonName()); + speciesExists.setLatinName(species.getLatinName()); + speciesExists.setGroupName(species.getGroupName()); + speciesExists.setFamily(species.getFamily()); + speciesExists.setType(species.getType()); + dao.update(speciesExists); + + if (logger.isInfoEnabled()) { + logger.info( + "The species {} already exists and is updated", + species.getCode()); + } + } + + return newSpecies; + } + protected boolean importObserver(ObserverDAO dao, Observer observer, String campaignCode) throws TopiaException { Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/ObserverImportModel.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/ObserverImportModel.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/ObserverImportModel.java 2012-08-18 12:44:43 UTC (rev 433) @@ -23,70 +23,46 @@ * #L% */ +import com.google.common.base.Preconditions; import fr.ulr.sammoa.persistence.Campaign; import fr.ulr.sammoa.persistence.Observer; import fr.ulr.sammoa.persistence.ObserverImpl; import org.nuiton.util.csv.Common; -import org.nuiton.util.csv.ImportModel; -import org.nuiton.util.csv.ImportableColumn; -import org.nuiton.util.csv.ModelBuilder; import org.nuiton.util.csv.ValueParser; +import org.nuiton.util.csv.ext.AbstractImportModel; import java.text.ParseException; -import java.util.List; /** * Created: 09/07/12 * * @author fdesbois <desbois@codelutin.com> */ -public class ObserverImportModel implements ImportModel<Observer> { +public class ObserverImportModel extends AbstractImportModel<Observer> { - protected Campaign campaign; + public ObserverImportModel(final Campaign campaign) { + super(';'); + newMandatoryColumn("INITIALS", Observer.PROPERTY_INITIALS); + newMandatoryColumn("FIRST_NAME", Observer.PROPERTY_FIRST_NAME); + newMandatoryColumn("LAST_NAME", Observer.PROPERTY_LAST_NAME); + newMandatoryColumn("ORGANIZATION", Observer.PROPERTY_ORGANIZATION); + newMandatoryColumn("EMAIL", Observer.PROPERTY_EMAIL); + newMandatoryColumn("PILOT", Observer.PROPERTY_PILOT, Common.BOOLEAN); + newMandatoryColumn("CAMPAIGN", Observer.PROPERTY_CAMPAIGN, new ValueParser<Campaign>() { - public ObserverImportModel(Campaign campaign) { - this.campaign = campaign; + @Override + public Campaign parse(String s) throws ParseException { + Preconditions.checkArgument( + campaign.getCode().equals(s), + String.format("The current campaign is %1$s and not %2$s", + campaign.getCode(), s)); + return campaign; + } + }); } @Override - public char getSeparator() { - return ';'; - } - - @Override - public void pushCsvHeaderNames(List<String> strings) { - } - - @Override public Observer newEmptyInstance() { return new ObserverImpl(); } - - @Override - public Iterable<ImportableColumn<Observer, Object>> getColumnsForImport() { - ModelBuilder builder = new ModelBuilder(); - builder.newMandatoryColumn("CAMPAIGN", Observer.PROPERTY_CAMPAIGN, CAMPAIGN_VALUE_PARSER); - builder.newMandatoryColumn("INITIALS", Observer.PROPERTY_INITIALS); - builder.newMandatoryColumn("FIRST_NAME", Observer.PROPERTY_FIRST_NAME); - builder.newMandatoryColumn("LAST_NAME", Observer.PROPERTY_LAST_NAME); - builder.newMandatoryColumn("ORGANIZATION", Observer.PROPERTY_ORGANIZATION); - builder.newMandatoryColumn("EMAIL", Observer.PROPERTY_EMAIL); - builder.newMandatoryColumn("PILOT", Observer.PROPERTY_PILOT, Common.BOOLEAN); - return builder.getColumnsForImport(); - } - - protected ValueParser<Campaign> CAMPAIGN_VALUE_PARSER = new ValueParser<Campaign>() { - - @Override - public Campaign parse(String s) throws ParseException { - Campaign result; - if (s.equals(campaign.getCode())) { - result = campaign; - } else { - throw new IllegalArgumentException( - String.format("The current campaign is %1$s and not %2$s", campaign.getCode(), s)); - } - return result; - } - }; } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/SpeciesImportModel.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/SpeciesImportModel.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/csv/SpeciesImportModel.java 2012-08-18 12:44:43 UTC (rev 433) @@ -23,69 +23,47 @@ * #L% */ +import com.google.common.base.Preconditions; import fr.ulr.sammoa.persistence.Region; import fr.ulr.sammoa.persistence.Species; import fr.ulr.sammoa.persistence.SpeciesImpl; -import org.nuiton.util.csv.ImportModel; -import org.nuiton.util.csv.ImportableColumn; -import org.nuiton.util.csv.ModelBuilder; import org.nuiton.util.csv.ValueParser; +import org.nuiton.util.csv.ext.AbstractImportModel; import java.text.ParseException; -import java.util.List; /** * Created: 17/07/12 * * @author fdesbois <desbois@codelutin.com> */ -public class SpeciesImportModel implements ImportModel<Species> { +public class SpeciesImportModel extends AbstractImportModel<Species> { - protected Region region; + public SpeciesImportModel(final Region region) { + super(';'); + newMandatoryColumn("CODE", Species.PROPERTY_CODE); + newMandatoryColumn("NOM_COMM", Species.PROPERTY_COMMON_NAME); + newMandatoryColumn("NOM_LATIN", Species.PROPERTY_LATIN_NAME); + newMandatoryColumn("TYPE", Species.PROPERTY_TYPE); + newMandatoryColumn("FAMILLE", Species.PROPERTY_FAMILY); + newMandatoryColumn("GROUPE", Species.PROPERTY_GROUP_NAME); + newMandatoryColumn("REGION", Species.PROPERTY_REGION, new ValueParser<Region>() { - public SpeciesImportModel(Region region) { - this.region = region; + @Override + public Region parse(String s) throws ParseException { + Preconditions.checkArgument( + region.getCode().equals(s), + String.format("The current region is %1$s and not %2$s", + region.getCode(), s) + ); + return region; + } + }); } @Override - public char getSeparator() { - return ';'; - } - - @Override - public void pushCsvHeaderNames(List<String> strings) { - } - - @Override public Species newEmptyInstance() { return new SpeciesImpl(); } - @Override - public Iterable<ImportableColumn<Species, Object>> getColumnsForImport() { - ModelBuilder builder = new ModelBuilder(); - builder.newMandatoryColumn("REGION", Species.PROPERTY_REGION, REGION_VALUE_PARSER); - builder.newMandatoryColumn("CODE", Species.PROPERTY_CODE); - builder.newMandatoryColumn("NOM_COMM", Species.PROPERTY_COMMON_NAME); - builder.newMandatoryColumn("NOM_LATIN", Species.PROPERTY_LATIN_NAME); - builder.newMandatoryColumn("TYPE", Species.PROPERTY_TYPE); - builder.newMandatoryColumn("FAMILLE", Species.PROPERTY_FAMILY); - builder.newMandatoryColumn("GROUPE", Species.PROPERTY_GROUP_NAME); - return builder.getColumnsForImport(); - } - - protected ValueParser<Region> REGION_VALUE_PARSER = new ValueParser<Region>() { - - @Override - public Region parse(String s) throws ParseException { - Region result; - if (s.equals(region.getCode())) { - result = region; - } else { - throw new IllegalArgumentException( - String.format("The current region is %1$s and not %2$s", region.getCode(), s)); - } - return result; - } - }; } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/ImportMapService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/ImportMapService.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/ImportMapService.java 2012-08-18 12:44:43 UTC (rev 433) @@ -62,9 +62,7 @@ public int importTransects(String campaignId, Iterable<Transect> transects) { - int result = 0; - - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { CampaignDAO campaignDAO = @@ -83,6 +81,7 @@ Map<String, Strate> strateMap = Maps.uniqueIndex(strates, Strates.toCode()); + int result = 0; int rowIndex = 0; for (Transect transect : transects) { @@ -147,20 +146,18 @@ transaction.commitTransaction(); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } public int importStrates(String campaignId, Iterable<Strate> strates) { - int result = 0; - - TopiaContext transaction = persistence.beginTransaction(); + TopiaContext transaction = beginTransaction(); try { CampaignDAO campaignDAO = @@ -180,6 +177,7 @@ Maps.newHashMap(Maps.uniqueIndex(sectors, Sectors.toSectorNumber())); + int result = 0; for (Strate strate : strates) { StrateType strateType = strate.getStrateType(); @@ -231,12 +229,12 @@ transaction.commitTransaction(); + return result; } catch (TopiaException e) { throw new TopiaRuntimeException(e); } finally { - persistence.endTransaction(transaction); + endTransaction(transaction); } - return result; } } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/StrateImportModel.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/StrateImportModel.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/StrateImportModel.java 2012-08-18 12:44:43 UTC (rev 433) @@ -27,18 +27,14 @@ import fr.ulr.sammoa.persistence.SectorImpl; import fr.ulr.sammoa.persistence.Strate; import fr.ulr.sammoa.persistence.StrateImpl; -import org.nuiton.util.csv.ImportModel; -import org.nuiton.util.csv.ImportableColumn; -import org.nuiton.util.csv.ModelBuilder; +import org.nuiton.util.csv.ext.AbstractImportModel; -import java.util.List; - /** * Created: 25/07/12 * * @author fdesbois <desbois@codelutin.com> */ -public class StrateImportModel implements ImportModel<Strate> { +public class StrateImportModel extends AbstractImportModel<Strate> { // 0 : Nom // 1 : Area (not used) @@ -48,44 +44,31 @@ // 5 : type_strat (string) for StrateType (code match) // 6 : ID_Secteur (double) - @Override - public char getSeparator() { - return ' '; + public StrateImportModel() { + super(';'); + newMandatoryColumn("Nom", Strate.PROPERTY_NAME); + newMandatoryColumn("Secteur", + Strate.PROPERTY_SECTOR + + "." + Sector.PROPERTY_NAME + ); + newMandatoryColumn("type_strat", + Strate.PROPERTY_STRATE_TYPE, + new StrateTypeValueParser() + ); + newMandatoryColumn("ID_Secteur", + Strate.PROPERTY_SECTOR + + "." + Sector.PROPERTY_SECTOR_NUMBER, + new DoubleToIntegerValueParser() + ); + newIgnoredColumn("Area"); + newIgnoredColumn("Shape_Area"); + newIgnoredColumn("Shape_Leng"); } @Override - public void pushCsvHeaderNames(List<String> strings) { - } - - @Override public Strate newEmptyInstance() { Strate result = new StrateImpl(); result.setSector(new SectorImpl()); return result; } - - @Override - public Iterable<ImportableColumn<Strate, Object>> getColumnsForImport() { - ModelBuilder builder = new ModelBuilder(); - builder.newMandatoryColumn("Nom", - Strate.PROPERTY_NAME - ); - builder.newMandatoryColumn("Secteur", - Strate.PROPERTY_SECTOR - + "." + Sector.PROPERTY_NAME - ); - builder.newMandatoryColumn("type_strat", - Strate.PROPERTY_STRATE_TYPE, - new StrateTypeValueParser() - ); - builder.newMandatoryColumn("ID_Secteur", - Strate.PROPERTY_SECTOR - + "." + Sector.PROPERTY_SECTOR_NUMBER, - new DoubleToIntegerValueParser() - ); - builder.newIgnoredColumn("Area"); - builder.newIgnoredColumn("Shape_Area"); - builder.newIgnoredColumn("Shape_Leng"); - return builder.getColumnsForImport(); - } } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/TransectImportModel.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/TransectImportModel.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/TransectImportModel.java 2012-08-18 12:44:43 UTC (rev 433) @@ -30,18 +30,14 @@ import fr.ulr.sammoa.persistence.Transect; import fr.ulr.sammoa.persistence.TransectImpl; import org.nuiton.util.csv.Common; -import org.nuiton.util.csv.ImportModel; -import org.nuiton.util.csv.ImportableColumn; -import org.nuiton.util.csv.ModelBuilder; +import org.nuiton.util.csv.ext.AbstractImportModel; -import java.util.List; - /** * Created: 25/07/12 * * @author fdesbois <desbois@codelutin.com> */ -public class TransectImportModel implements ImportModel<Transect> { +public class TransectImportModel extends AbstractImportModel<Transect> { // 0 : Length // 1 : TR_ID used as name @@ -54,13 +50,46 @@ // 8 : STRATE (string) for StrateType (code match) // 9 : Shape_Leng (not used) - @Override - public char getSeparator() { - return ' '; - } - @Override - public void pushCsvHeaderNames(List<String> strings) { + public TransectImportModel() { + super(';'); + newMandatoryColumn("Length", + Transect.PROPERTY_LENGTH, + Common.DOUBLE_PRIMITIVE + ); + newMandatoryColumn("TR_ID", Transect.PROPERTY_NAME); + newMandatoryColumn("Xstart", + Transect.PROPERTY_START_X, + Common.DOUBLE_PRIMITIVE + ); + newMandatoryColumn("Ystart", + Transect.PROPERTY_START_Y, + Common.DOUBLE_PRIMITIVE + ); + newMandatoryColumn("Xend", + Transect.PROPERTY_END_X, + Common.DOUBLE_PRIMITIVE + ); + newMandatoryColumn("Yend", + Transect.PROPERTY_END_Y, + Common.DOUBLE_PRIMITIVE + ); + newMandatoryColumn("SECTEUR", + Transect.PROPERTY_STRATE + "." + + Strate.PROPERTY_SECTOR + "." + + Sector.PROPERTY_SECTOR_NUMBER, + new DoubleToIntegerValueParser() + ); + newMandatoryColumn("STRATE", + Transect.PROPERTY_STRATE + "." + + Strate.PROPERTY_STRATE_TYPE, + new StrateTypeValueParser() + ); + newMandatoryColumn("Passage", + Transect.PROPERTY_NB_TIMES, + new DoubleToIntegerValueParser() + ); + newIgnoredColumn("Shape_Leng"); } @Override @@ -72,48 +101,4 @@ return result; } - @Override - public Iterable<ImportableColumn<Transect, Object>> getColumnsForImport() { - ModelBuilder builder = new ModelBuilder(); - builder.newMandatoryColumn("Length", - Transect.PROPERTY_LENGTH, - Common.DOUBLE_PRIMITIVE - ); - builder.newMandatoryColumn("TR_ID", - Transect.PROPERTY_NAME) - ; - builder.newMandatoryColumn("Xstart", - Transect.PROPERTY_START_X, - Common.DOUBLE_PRIMITIVE - ); - builder.newMandatoryColumn("Ystart", - Transect.PROPERTY_START_Y, - Common.DOUBLE_PRIMITIVE - ); - builder.newMandatoryColumn("Xend", - Transect.PROPERTY_END_X, - Common.DOUBLE_PRIMITIVE - ); - builder.newMandatoryColumn("Yend", - Transect.PROPERTY_END_Y, - Common.DOUBLE_PRIMITIVE - ); - builder.newMandatoryColumn("SECTEUR", - Transect.PROPERTY_STRATE + "." - + Strate.PROPERTY_SECTOR + "." - + Sector.PROPERTY_SECTOR_NUMBER, - new DoubleToIntegerValueParser() - ); - builder.newMandatoryColumn("STRATE", - Transect.PROPERTY_STRATE + "." - + Strate.PROPERTY_STRATE_TYPE, - new StrateTypeValueParser() - ); - builder.newMandatoryColumn("Passage", - Transect.PROPERTY_NB_TIMES, - new DoubleToIntegerValueParser() - ); - builder.newIgnoredColumn("Shape_Leng"); - return builder.getColumnsForImport(); - } } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java 2012-08-18 12:44:43 UTC (rev 433) @@ -78,6 +78,7 @@ protected final DateFormat timeFormat = new SimpleDateFormat("HHmmss"); public int exportEffortsMap(ExportMapModel dataModel) { + Preconditions.checkNotNull(dataModel); Preconditions.checkNotNull(dataModel.getCampaign()); Preconditions.checkNotNull(dataModel.getBeginDate()); Preconditions.checkNotNull(dataModel.getEndDate()); @@ -300,6 +301,7 @@ } public int exportObservationsMap(ExportMapModel dataModel) { + Preconditions.checkNotNull(dataModel); Preconditions.checkNotNull(dataModel.getCampaign()); Preconditions.checkNotNull(dataModel.getBeginDate()); Preconditions.checkNotNull(dataModel.getEndDate()); @@ -547,7 +549,7 @@ } public int exportGeoPointsMap(ExportMapModel dataModel) { - + Preconditions.checkNotNull(dataModel); Preconditions.checkNotNull(dataModel.getCampaign()); Preconditions.checkNotNull(dataModel.getBeginDate()); Preconditions.checkNotNull(dataModel.getEndDate()); Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationModel.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationModel.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationModel.java 2012-08-18 12:44:43 UTC (rev 433) @@ -23,13 +23,7 @@ * #L% */ -import com.google.common.collect.Iterables; -import fr.ulr.sammoa.persistence.Campaign; -import fr.ulr.sammoa.persistence.Flight; -import org.nuiton.topia.persistence.TopiaId; - import java.io.File; -import java.util.Set; /** * Model of sammoa export. @@ -40,41 +34,37 @@ public class ExportApplicationModel { public static ExportApplicationModel newModel(File exportDirectory, - Campaign campaign, - Set<Flight> flights, + String campaignId, + Iterable<String> flightIds, ExportApplicationCallbackMode callback) { ExportApplicationModel result = new ExportApplicationModel(); result.exportFile = exportDirectory; - result.campaign = campaign; - result.flights = flights; + result.campaignId = campaignId; + result.flightIds = flightIds; result.callback = callback; return result; } - protected Campaign campaign; + protected String campaignId; - protected Set<Flight> flights; + protected Iterable<String> flightIds; protected File exportFile; protected ExportApplicationCallbackMode callback; - public Campaign getCampaign() { - return campaign; + public String getCampaignId() { + return campaignId; } - public Set<Flight> getFlights() { - return flights; + public Iterable<String> getFlightIds() { + return flightIds; } public ExportApplicationCallbackMode getCallback() { return callback; } - public Iterable<String> getFlightIds() { - return Iterables.transform(getFlights(), TopiaId.GET_TOPIA_ID); - } - public File getExportFile() { return exportFile; } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationService.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationService.java 2012-08-18 12:44:43 UTC (rev 433) @@ -23,11 +23,17 @@ * #L% */ +import com.google.common.base.Preconditions; +import com.google.common.collect.Multimap; +import fr.ulr.sammoa.application.FlightService; import fr.ulr.sammoa.application.SammoaServiceSupport; import fr.ulr.sammoa.application.SammoaTechnicalException; import fr.ulr.sammoa.application.io.CampaignStorage; import fr.ulr.sammoa.application.io.CampaignStorages; -import fr.ulr.sammoa.persistence.Campaign; +import fr.ulr.sammoa.persistence.Flight; +import fr.ulr.sammoa.persistence.GeoPoint; +import fr.ulr.sammoa.persistence.Observation; +import fr.ulr.sammoa.persistence.Route; import fr.ulr.sammoa.persistence.SammoaDAOHelper; import fr.ulr.sammoa.persistence.SammoaDbMetas; import fr.ulr.sammoa.persistence.SammoaEntityEnum; @@ -35,11 +41,11 @@ import org.apache.commons.lang3.StringUtils; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.framework.TopiaQuery; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.csv.EntityCsvModel; import org.nuiton.topia.persistence.csv.out.EntityAssociationExportModel; +import org.nuiton.topia.persistence.csv.out.ExportEntityVisitor; import org.nuiton.topia.persistence.csv.out.ExportModelFactory; import org.nuiton.topia.persistence.csv.out.PrepareDataForExport; import org.nuiton.topia.persistence.csv.out.TopiaCsvExports; @@ -57,6 +63,7 @@ import java.io.File; import java.io.IOException; import java.util.List; +import java.util.Map; /** * To export application as a {@code sammoa} file. @@ -74,6 +81,11 @@ new TimeLog(ExportApplicationService.class); public void exportApplication(ExportApplicationModel model) throws IOException { + Preconditions.checkNotNull(model); + Preconditions.checkNotNull(model.getExportFile()); + Preconditions.checkNotNull(model.getCampaignId()); + Preconditions.checkNotNull(model.getCallback()); + Preconditions.checkNotNull(model.getFlightIds()); if (logger.isInfoEnabled()) { logger.info("Start Application export to {}", @@ -82,10 +94,8 @@ long startTime = TimeLog.getTime(); - Campaign campaign = model.getCampaign(); + String campaignId = model.getCampaignId(); - String campaignId = campaign.getTopiaId(); - CampaignStorage storage = CampaignStorages.getStorage(config, campaignId); File targetDirectory = new File(config.getTmpDirectory(), @@ -109,9 +119,8 @@ TopiaContext tx = beginTransaction(); try { - exportReferential(tx, csvDirectory); - exportData(tx, csvDirectory, campaignId, flightIds); + exportData(tx, csvDirectory, flightIds); } finally { endTransaction(tx); } @@ -177,15 +186,65 @@ } - protected void exportData(TopiaContext tx, File csvDirectory, - String campaignId, - Iterable<String> flightIds) { + protected void exportData(TopiaContext tx, + File csvDirectory, + Iterable<String> flightIds) throws IOException { + + + DbMeta<SammoaEntityEnum> dbMetas = persistence.getDbMetas(); + + MetaFilenameAware<SammoaEntityEnum>[] dataEntries = SammoaDbMetas.getDataEntries(dbMetas); + Multimap<SammoaEntityEnum, MetaFilenameAware<SammoaEntityEnum>> associationsEntries = SammoaDbMetas.getDataAssociationsEntries(dbMetas); + + Map<SammoaEntityEnum, TopiaCsvExports.EntityExportContext<SammoaEntityEnum>> exportContexts = + TopiaCsvExports.createReplicateEntityVisitorContexts( + defaultExportModelFactory, + dataEntries, + associationsEntries, + csvDirectory); + + ExportEntityVisitor<SammoaEntityEnum> exportVisitor = + new ExportEntityVisitor<SammoaEntityEnum>(dbMetas.getEntityEnumProvider(), exportContexts); + + FlightService flightService = newService(FlightService.class); + + try { + for (String flightId : flightIds) { + + Flight flight = flightService.getFlight(tx, flightId); + + exportVisitor.export(flight); + + List<GeoPoint> geoPoints = + flightService.getFlightGeoPoints(tx, flight); + + for (GeoPoint geoPoint : geoPoints) { + exportVisitor.export(geoPoint); + } + + List<Route> routes = flightService.getRoutes(tx, flight); + + for (Route route : routes) { + exportVisitor.export(route); + } + + List<Observation> observations = + flightService.getObservations(tx, flight); + + for (Observation observation : observations) { + exportVisitor.export(observation); + } + + } + } finally { + exportVisitor.close(); + } } protected void removeFlightData(ExportApplicationModel model) { if (logger.isInfoEnabled()) { logger.info("Will remove flight data for campaign {}", - model.getCampaign().getCode()); + model.getCampaignId()); } } @@ -282,13 +341,13 @@ // first query to count datas - TopiaQuery query = dao.createQuery("e"); + String hql = "FROM " + entityEnum.getImplementationFQN(); if (StringUtils.isNotEmpty(extraWhereQuery)) { - query.addWhere(extraWhereQuery); + hql += " WHERE " + extraWhereQuery; } - result = dao.findAllByQuery(query); + result = dao.getContext().findAll(hql); return result; } catch (TopiaException eee) { throw new SammoaTechnicalException("Could not obtain data", eee); Modified: trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/FlightServiceTest.java =================================================================== --- trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/FlightServiceTest.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/FlightServiceTest.java 2012-08-18 12:44:43 UTC (rev 433) @@ -58,8 +58,9 @@ new SammoaConfig("sammoa-test.properties"); @Rule - public SammoaDatabase database = new SammoaDatabase("/" + - config.getApplicationConfig().getConfigFileName(), config.getAutoCommitDelay()); + public SammoaDatabase database = new SammoaDatabase( + "/" + config.getApplicationConfig().getConfigFileName(), + config.getAutoCommitDelay()); @Test public void testCreateFlight() throws Exception { Modified: trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/io/input/csv/ImportCsvServiceTest.java =================================================================== --- trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/io/input/csv/ImportCsvServiceTest.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/io/input/csv/ImportCsvServiceTest.java 2012-08-18 12:44:43 UTC (rev 433) @@ -25,7 +25,6 @@ import fr.ulr.sammoa.application.SammoaConfig; import fr.ulr.sammoa.application.SammoaContext; -import fr.ulr.sammoa.application.io.input.csv.ImportCsvService; import fr.ulr.sammoa.persistence.Campaign; import fr.ulr.sammoa.persistence.Observer; import fr.ulr.sammoa.persistence.ObserverDAO; Modified: trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/output/map/ExportMapServiceTest.java =================================================================== --- trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/output/map/ExportMapServiceTest.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/output/map/ExportMapServiceTest.java 2012-08-18 12:44:43 UTC (rev 433) @@ -92,7 +92,8 @@ @Test public void testExportGeoPointsMap() throws Exception { - SammoaContext context = new SammoaContext(config, database.getPersistence()); + SammoaContext context = new SammoaContext(config, + database.getPersistence()); Campaign campaign = database.createCampaign("PACOMM", "FRANCE"); campaign.setBeginDate(DateUtil.createDate(1, 1, 2012)); 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-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-18 12:44:43 UTC (rev 433) @@ -222,8 +222,11 @@ startTime = timeLog.log(startTime, "beforeInitUI", "entities are loaded"); - flightController = new FlightControllerDefault(context.getAppContext(), flight); + context.newService(FlightControllerDefault.class); +// flightController = new FlightControllerDefault(context.getAppContext(), flight); + flightController = context.newService(FlightControllerDefault.class); + try { flightController.openGpsDevice(context.getConfig().getGpsConfig()); } catch (DeviceTechnicalException ex) { @@ -245,7 +248,7 @@ flightController.getGpsHandler().addDeviceStateListener(deviceStateListener); flightController.getAudioRecorder().addDeviceStateListener(deviceStateListener); - flightController.init(); + flightController.init(flight); FlightUIModel model = new FlightUIModel(); Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIHandler.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIHandler.java 2012-08-18 12:44:43 UTC (rev 433) @@ -273,10 +273,8 @@ @Override public void actionPerformed(ActionEvent e) { JButton source = (JButton) e.getSource(); - ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer( - source, ExportMapLauncherUI.class); - SammoaUtil.updateBusyState(fileChooserUI, true); + try { ExportMapUIModel model = ui.getModel(); @@ -291,6 +289,11 @@ if (doExport) { + ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer( + source, ExportMapLauncherUI.class); + + SammoaUtil.updateBusyState(fileChooserUI, true); + // launch export int nbRow = exportService.exportEffortsMap(dataModel); @@ -343,11 +346,9 @@ public void actionPerformed(ActionEvent e) { JButton source = (JButton) e.getSource(); - ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer( - source, ExportMapLauncherUI.class); try { - SammoaUtil.updateBusyState(fileChooserUI, true); + ExportMapUIModel model = ui.getModel(); // persist the file name @@ -360,6 +361,12 @@ boolean doExport = checkFileToExport(dataModel); if (doExport) { + + ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer( + source, ExportMapLauncherUI.class); + + SammoaUtil.updateBusyState(fileChooserUI, true); + // launch export int nbRow = exportService.exportObservationsMap(dataModel); @@ -400,9 +407,6 @@ JButton source = (JButton) e.getSource(); - ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer( - source, ExportMapLauncherUI.class); - SammoaUtil.updateBusyState(fileChooserUI, true); try { ExportMapUIModel model = getModel(); @@ -416,7 +420,14 @@ boolean doExport = checkFileToExport(dataModel); - if (doExport) {// launch export + if (doExport) { + + ExportMapLauncherUI fileChooserUI = SwingUtil.getParentContainer( + source, ExportMapLauncherUI.class); + + SammoaUtil.updateBusyState(fileChooserUI, true); + + // launch export int nbRow = exportService.exportGeoPointsMap(dataModel); SammoaUtil.showSuccessMessage( @@ -452,9 +463,9 @@ Action startAction) { model.setExportFilename(defaultFilename); - final ExportMapLauncherUI ui = new ExportMapLauncherUI(this); + final ExportMapLauncherUI exportUI = new ExportMapLauncherUI(this); - JFrame frame = this.ui.getParentContainer(JFrame.class); + JFrame frame = ui.getParentContainer(JFrame.class); Action closeAction = new AbstractAction( _("sammoa.action.cancelExport"), SwingUtil.createActionIcon("cancel")) { @@ -462,14 +473,14 @@ @Override public void actionPerformed(ActionEvent e) { - ui.getParentContainer(JDialog.class).setVisible(false); + exportUI.getParentContainer(JDialog.class).setVisible(false); } }; - ui.getStart().setAction(startAction); - ui.getCancel().setAction(closeAction); + exportUI.getStart().setAction(startAction); + exportUI.getCancel().setAction(closeAction); - SammoaUtil.openInDialog(ui, + SammoaUtil.openInDialog(exportUI, frame, effortTitle, closeAction, @@ -510,14 +521,7 @@ // set datas to list and init renderer list.init((JXPathDecorator<E>) decorator, data); -// // get the renderer initialized -// ListCellRenderer renderer = list.getList().getCellRenderer(); -// -// // add the specific renderer -// list.getList().setCellRenderer(new ReferentielListCellRenderer(renderer)); - list.putClientProperty("data", data); } - } Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUIHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUIHandler.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUIHandler.java 2012-08-18 12:44:43 UTC (rev 433) @@ -185,7 +185,6 @@ public void exportApplication() { JFrame frame = ui.getParentContainer(JFrame.class); - SammoaUtil.updateBusyState(frame, true); try { ExportApplicationModel dataModel = getModel().toModel(); @@ -194,6 +193,8 @@ if (doExport) { + SammoaUtil.updateBusyState(frame.getRootPane(), true); + exportService.exportApplication(dataModel); SammoaUtil.showSuccessMessage( @@ -205,7 +206,7 @@ } catch (Exception e) { ErrorDialogUI.showError(e); } finally { - SammoaUtil.updateBusyState(frame, false); + SammoaUtil.updateBusyState(frame.getRootPane(), false); } } Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUIModel.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUIModel.java 2012-08-18 12:33:57 UTC (rev 432) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUIModel.java 2012-08-18 12:44:43 UTC (rev 433) @@ -23,6 +23,7 @@ * #L% */ +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ulr.sammoa.application.io.output.sammoa.ExportApplicationCallbackMode; @@ -30,6 +31,7 @@ import fr.ulr.sammoa.persistence.Campaign; import fr.ulr.sammoa.persistence.Flight; import org.jdesktop.beans.AbstractSerializableBean; +import org.nuiton.topia.persistence.TopiaId; import java.io.File; import java.util.List; @@ -180,8 +182,8 @@ } ExportApplicationModel result = ExportApplicationModel.newModel( new File(getExportDirectory(), getExportFilename()), - getSelectedCampaign(), - flightsToExport, + getSelectedCampaign().getTopiaId(), + Iterables.transform(flightsToExport, TopiaId.GET_TOPIA_ID), getCallback() ); return result;