Author: tchemit Date: 2012-08-19 19:51:27 +0200 (Sun, 19 Aug 2012) New Revision: 439 Url: http://forge.codelutin.com/repositories/revision/sammoa/439 Log: refs #1201: Export format application (export callback is ok) improve storages add svn properties, license headers and much much more Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java Removed: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorages.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorages.java 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/SammoaService.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.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/FlightStorage.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/ExportApplicationService.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlights.java trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUIHandler.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/input/java-info.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUI.css trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUI.jaxx trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUIHandler.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUIModel.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/java-info.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/java-info.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/java-info.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/java-info.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-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-19 17:51:27 UTC (rev 439) @@ -29,10 +29,10 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import fr.ulr.sammoa.application.io.CampaignStorage; -import fr.ulr.sammoa.application.io.CampaignStorages; import fr.ulr.sammoa.application.io.FlightStorage; -import fr.ulr.sammoa.application.io.FlightStorages; +import fr.ulr.sammoa.application.io.SammoaStorages; import fr.ulr.sammoa.persistence.AutoSaveListener; import fr.ulr.sammoa.persistence.Campaign; import fr.ulr.sammoa.persistence.Flight; @@ -43,6 +43,7 @@ import fr.ulr.sammoa.persistence.Observation; import fr.ulr.sammoa.persistence.ObservationDAO; import fr.ulr.sammoa.persistence.ObservationStatus; +import fr.ulr.sammoa.persistence.Observations; import fr.ulr.sammoa.persistence.Observer; import fr.ulr.sammoa.persistence.ObserverPosition; import fr.ulr.sammoa.persistence.ObserverPositionDAO; @@ -53,12 +54,15 @@ import fr.ulr.sammoa.persistence.Route; import fr.ulr.sammoa.persistence.RouteDAO; import fr.ulr.sammoa.persistence.RouteType; +import fr.ulr.sammoa.persistence.Routes; import fr.ulr.sammoa.persistence.SammoaDAOHelper; import fr.ulr.sammoa.persistence.Transect; import fr.ulr.sammoa.persistence.TransectDAO; import fr.ulr.sammoa.persistence.TransectFlight; import fr.ulr.sammoa.persistence.TransectFlightDAO; +import fr.ulr.sammoa.persistence.TransectFlights; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaRuntimeException; @@ -67,13 +71,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; /** * Created: 08/06/12 @@ -265,15 +269,11 @@ transaction.commitTransaction(); // create flight storage - CampaignStorage campaignStorage = CampaignStorages.getStorage( - config, campaign.getTopiaId()); + CampaignStorage campaignStorage = + getCampaignStorage(campaign.getTopiaId()); - try { - FlightStorages.createStorage(campaignStorage, result.getTopiaId()); - } catch (IOException e) { - throw new SammoaTechnicalException( - "Could not create flight storage", e); - } + SammoaStorages.createFlightStorage(campaignStorage, + result.getTopiaId()); return result; } catch (TopiaException e) { @@ -289,10 +289,44 @@ * @param flightId the flight id to remove * @since 0.6 */ - public void deleteFlight(String flightId) { + public void deleteFlight(String campaignId, String flightId) { + Preconditions.checkArgument(StringUtils.isNotBlank(campaignId)); + Preconditions.checkArgument(StringUtils.isNotBlank(flightId)); TopiaContext tx = beginTransaction(); try { + + // send delete queries to db + deleteFlightInDb(tx, flightId); + + // commit db + tx.commitTransaction(); + + } catch (TopiaException e) { + throw new SammoaTechnicalException(e); + } finally { + endTransaction(tx); + } + + // delete flight storage + CampaignStorage campaignStorage = getCampaignStorage(campaignId); + + FlightStorage flightStorage = + campaignStorage.getFlightStorage(flightId); + + SammoaStorages.deleteFlightStorage(flightStorage); + } + + /** + * Remove the given flight from db, but do not commit anything + * + * @param tx current transaction to use + * @param flightId the flight id to remove + * @since 0.6 + */ + public void deleteFlightInDb(TopiaContext tx, String flightId) { + + try { FlightDAO dao = SammoaDAOHelper.getFlightDAO(tx); Flight flight = dao.findByTopiaId(flightId); @@ -302,48 +336,40 @@ // delete geoPoints List<GeoPoint> geoPoints = getFlightGeoPoints(tx, flight); GeoPointDAO geoPointDAO = SammoaDAOHelper.getGeoPointDAO(tx); - for (GeoPoint geoPoint : geoPoints) { - geoPointDAO.delete(geoPoint); - } + geoPointDAO.deleteAll(geoPoints); + Set<ObserverPosition> positions = Sets.newHashSet(); + // delete routes List<Route> routes = getRoutes(tx, flight); + // keep observerPositions to delete from routes + positions.addAll(Routes.toObserverPositions(routes)); + // keep observerPositions to delete from transectFlights + positions.addAll(TransectFlights.toObserverPositions(Routes.toTransectFlights(routes))); RouteDAO routeDAO = SammoaDAOHelper.getRouteDAO(tx); - for (Route route : routes) { - routeDAO.delete(route); - } + routeDAO.deleteAll(routes); // delete observations List<Observation> observations = getObservations(tx, flight); + // keep observerPositions to delete + positions.addAll(Observations.toObserverPositions(observations)); ObservationDAO observationDAO = SammoaDAOHelper.getObservationDAO(tx); - for (Observation observation : observations) { - observationDAO.delete(observation); - } + observationDAO.deleteAll(observations); + + // delete observationPositions + ObserverPositionDAO observerPositionDAO = SammoaDAOHelper.getObserverPositionDAO(tx); + observerPositionDAO.deleteAll(positions); + // delete flight dao.delete(flight); - // delete flight storage - CampaignStorage campaignStorage = CampaignStorages.getStorage( - config, flight.getCampaign().getTopiaId()); - - FlightStorage flightStorage = - campaignStorage.getFlightStorage(flightId); - - try { - FlightStorages.deleteStorage(flightStorage); - } catch (IOException e) { - throw new SammoaTechnicalException( - "Could not delete flight storage", e); - } - } catch (TopiaException e) { throw new SammoaTechnicalException(e); - } finally { - endTransaction(tx); } } + /** * Retrieve all observer from {@code flight} which are allowed to be * on positions for transects and routes. This means, no pilots and a null @@ -491,7 +517,8 @@ TopiaContext transaction = beginTransaction(); try { - TransectFlightDAO dao = SammoaDAOHelper.getTransectFlightDAO(transaction); + TransectFlightDAO dao = + SammoaDAOHelper.getTransectFlightDAO(transaction); Map<Transect, Long> result; if (CollectionUtils.isEmpty(transects)) { 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-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java 2012-08-19 17:51:27 UTC (rev 439) @@ -24,19 +24,23 @@ package fr.ulr.sammoa.application; import com.google.common.base.Preconditions; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import fr.ulr.sammoa.application.io.CampaignStorage; -import fr.ulr.sammoa.application.io.CampaignStorages; +import fr.ulr.sammoa.application.io.SammoaStorages; import fr.ulr.sammoa.persistence.Campaign; import fr.ulr.sammoa.persistence.CampaignDAO; import fr.ulr.sammoa.persistence.Flight; import fr.ulr.sammoa.persistence.Observer; import fr.ulr.sammoa.persistence.ObserverDAO; +import fr.ulr.sammoa.persistence.ObserverPosition; +import fr.ulr.sammoa.persistence.ObserverPositionDAO; import fr.ulr.sammoa.persistence.Observers; import fr.ulr.sammoa.persistence.Region; import fr.ulr.sammoa.persistence.RegionDAO; import fr.ulr.sammoa.persistence.SammoaDAOHelper; +import fr.ulr.sammoa.persistence.Sector; +import fr.ulr.sammoa.persistence.SectorDAO; import fr.ulr.sammoa.persistence.Species; import fr.ulr.sammoa.persistence.SpeciesDAO; import fr.ulr.sammoa.persistence.Strate; @@ -46,12 +50,11 @@ import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaRuntimeException; -import org.nuiton.topia.persistence.TopiaId; -import java.io.IOException; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Set; /** * Created: 18/06/12 @@ -149,7 +152,6 @@ Preconditions.checkNotNull(campaign.getCode()); Preconditions.checkNotNull(campaign.getRegion()); - TopiaContext transaction = beginTransaction(); try { @@ -161,10 +163,12 @@ if (createCampaign) { - Campaign existCampaign = dao.findByNaturalId(campaign.getCode(), campaign.getRegion()); + Campaign existCampaign = dao.findByNaturalId( + campaign.getCode(), campaign.getRegion()); Preconditions.checkArgument(existCampaign == null); - Campaign newCampaign = dao.createByNaturalId(campaign.getCode(), campaign.getRegion()); + Campaign newCampaign = dao.createByNaturalId( + campaign.getCode(), campaign.getRegion()); newCampaign.setName(campaign.getName()); newCampaign.setBeginDate(campaign.getBeginDate()); newCampaign.setEndDate(campaign.getEndDate()); @@ -188,12 +192,8 @@ if (createCampaign) { // creates the campaign storage - try { - CampaignStorages.createStorage(config, result); - } catch (IOException e) { - throw new SammoaTechnicalException( - "Could not create campaign storage", e); - } + SammoaStorages.createCampaignStorage( + config.getCampaignDirectory(), result); } return result; @@ -384,54 +384,54 @@ FlightService flightService = newService(FlightService.class); - // delete all campaign flights + // delete all flights from db List<Flight> flights = flightService.getFlights(tx, campaign); for (Flight flight : flights) { - flightService.deleteFlight(flight.getTopiaId()); + flightService.deleteFlightInDb(tx, flight.getTopiaId()); } - // delete observers - List<Observer> observers = getAllObservers(campaign); + // delete observers and observerPositions ObserverDAO observerDAO = SammoaDAOHelper.getObserverDAO(tx); + List<Observer> observers = observerDAO.findAllByCampaign(campaign); + ObserverPositionDAO observerPositionDAO = + SammoaDAOHelper.getObserverPositionDAO(tx); + Set<ObserverPosition> positions = Sets.newHashSet(); for (Observer observer : observers) { - observerDAO.delete(observer); + positions.addAll(observerPositionDAO.findAllByObserver(observer)); } + observerDAO.deleteAll(observers); + observerPositionDAO.deleteAll(positions); // delete transects List<Transect> transects = getAllTransects(tx, campaign); - TransectDAO transectDAO = SammoaDAOHelper.getTransectDAO(tx); - for (Transect transect : transects) { - transectDAO.delete(transect); - } + transectDAO.deleteAll(transects); // delete strates List<Strate> strates = getAllStrates(tx, campaign); StrateDAO strateDAO = SammoaDAOHelper.getStrateDAO(tx); - for (Strate strate : strates) { - strateDAO.delete(strate); - } + strateDAO.deleteAll(strates); + // delete sectors + SectorDAO sectorDAO = SammoaDAOHelper.getSectorDAO(tx); + List<Sector> sectors = sectorDAO.findAllByCampaign(campaign); + sectorDAO.deleteAll(sectors); + // delete campaign dao.delete(campaign); - // delete campaign storage - CampaignStorage campaignStorage = CampaignStorages.getStorage( - config, campaignId); + // commit + tx.commitTransaction(); - try { - CampaignStorages.deleteStorage(campaignStorage); - } catch (IOException e) { - throw new SammoaTechnicalException( - "Could not delete campaign storage", e); - } - } catch (TopiaException e) { throw new SammoaTechnicalException(e); } finally { endTransaction(tx); } + + // delete campaign storage + deleteCampaignStorage(campaignId); } public void deleteAllData() { @@ -440,11 +440,7 @@ TopiaContext tx = beginTransaction(); try { CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(tx); - - List<Campaign> campaigns = dao.findAll(); - - campaignIds = Iterables.transform(campaigns, TopiaId.GET_TOPIA_ID); - + campaignIds = dao.findAllIds(); } catch (TopiaException e) { throw new SammoaTechnicalException(e); } finally { @@ -454,16 +450,14 @@ persistence.destroyDb(); for (String campaignId : campaignIds) { - // delete campaign storage - CampaignStorage campaignStorage = CampaignStorages.getStorage( - config, campaignId); - try { - CampaignStorages.deleteStorage(campaignStorage); - } catch (IOException e) { - throw new SammoaTechnicalException( - "Could not delete campaign storage", e); - } + // delete campaign storage + deleteCampaignStorage(campaignId); } } + + protected void deleteCampaignStorage(String campaignId) { + CampaignStorage campaignStorage = getCampaignStorage(campaignId); + SammoaStorages.deleteCampaignStorage(campaignStorage); + } } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaService.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaService.java 2012-08-19 17:51:27 UTC (rev 439) @@ -39,5 +39,7 @@ */ public interface SammoaService { + <S extends SammoaService> S newService(Class<S> serviceType); + void setSammoaContext(SammoaContext context); } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.java 2012-08-19 17:51:27 UTC (rev 439) @@ -23,14 +23,18 @@ * #L% */ +import fr.ulr.sammoa.application.io.CampaignStorage; +import fr.ulr.sammoa.application.io.SammoaStorages; import fr.ulr.sammoa.persistence.SammoaPersistence; import org.nuiton.topia.TopiaContext; +import java.io.File; + /** * Sammoa service support. * <p/> * This simple implementation of {@link SammoaService}, offer to keep the - * {@link #context}, {@link #config} and {@link #persistence} obejcts. + * {@link #context}, {@link #config} and {@link #persistence} objects. * <p/> * <strong>Note:</strong> should be used for any service! and never * instanciated by hand but via {@link SammoaContext#newService(Class)} method. @@ -46,11 +50,25 @@ protected SammoaPersistence persistence; - + @Override public <S extends SammoaService> S newService(Class<S> serviceType) { return context.newService(serviceType); } + @Override + public void setSammoaContext(SammoaContext context) { + this.context = context; + this.persistence = context.getPersistence(); + this.config = context.getConfig(); + } + + public CampaignStorage getCampaignStorage(String campaignId) { + File directory = config.getCampaignDirectory(); + CampaignStorage campaignStorage = SammoaStorages.getCampaignStorage( + directory, campaignId); + return campaignStorage; + } + protected TopiaContext beginTransaction() { TopiaContext tx = persistence.beginTransaction(); return tx; @@ -59,11 +77,4 @@ protected void endTransaction(TopiaContext tx) { persistence.endTransaction(tx); } - - @Override - public void setSammoaContext(SammoaContext context) { - this.context = context; - this.persistence = context.getPersistence(); - this.config = context.getConfig(); - } } 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-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java 2012-08-19 17:51:27 UTC (rev 439) @@ -40,7 +40,6 @@ import fr.ulr.sammoa.application.device.gps.GpsLocationEvent; import fr.ulr.sammoa.application.device.gps.GpsLocationListener; import fr.ulr.sammoa.application.io.CampaignStorage; -import fr.ulr.sammoa.application.io.CampaignStorages; import fr.ulr.sammoa.application.io.FlightStorage; import fr.ulr.sammoa.persistence.Campaign; import fr.ulr.sammoa.persistence.Flight; @@ -258,8 +257,8 @@ this.listeners = Sets.newHashSet(); Campaign campaign = flight.getCampaign(); - CampaignStorage campaignStorage = CampaignStorages.getStorage( - context.getConfig(), campaign.getTopiaId()); + CampaignStorage campaignStorage = + getCampaignStorage(campaign.getTopiaId()); flightStorage = campaignStorage.getFlightStorage(flight.getTopiaId()); if (initialized) { 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-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java 2012-08-19 17:51:27 UTC (rev 439) @@ -23,19 +23,7 @@ * #L% */ -import com.google.common.base.Charsets; -import com.google.common.base.Function; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.io.Files; -import org.apache.commons.io.IOUtils; -import org.apache.commons.io.filefilter.DirectoryFileFilter; - -import java.io.BufferedReader; import java.io.File; -import java.io.FileFilter; -import java.io.IOException; -import java.util.Properties; /** * Storage for a campaign. @@ -43,41 +31,14 @@ * @author tchemit <chemit@codelutin.com> * @since 0.6 */ -public class CampaignStorage { +public class CampaignStorage extends SammoaStorage { - public static final Function<File, FlightStorage> FILE_FLIGHT_STORAGE_FUNCTION = new Function<File, FlightStorage>() { - @Override - public FlightStorage apply(File input) { - return new FlightStorage(input.getParentFile(), - input.getName()); - } - }; - - /** Root directory for this storage. */ - protected final File directory; - - /** Id of the campaign. */ - protected final String campaignId; - - /** Properties of the campaign. */ - protected final Properties properties; - - public CampaignStorage(File dataDirectory, String campaignId) { - this.directory = new File(dataDirectory, campaignId); - this.campaignId = campaignId; - this.properties = new Properties(); + CampaignStorage(File dataDirectory, String id) { + super(dataDirectory, id, "campaign.properties"); } - public String getCampaignId() { - return campaignId; - } - - public File getDirectory() { - return directory; - } - public File getMapDirectory() { - return new File(directory, "map"); + return new File(getDirectory(), "map"); } public File getMapFile(String mapFilename) { @@ -85,41 +46,17 @@ } public File getFlightDirectory() { - return new File(directory, "flight"); + return new File(getDirectory(), "flight"); } public File getCsvDirectory() { - return new File(directory, "csv"); + return new File(getDirectory(), "csv"); } - public File getPropertiesFile() { - return new File(directory, "campaign.properties"); - } - - public Properties getProperties() throws IOException { - return properties; - } - - public void loadProperties() throws IOException { - BufferedReader reader = - Files.newReader(getPropertiesFile(), Charsets.UTF_8); - try { - properties.load(reader); - reader.close(); - } finally { - IOUtils.closeQuietly(reader); - } - } - public FlightStorage getFlightStorage(String flightId) { - File flightStorageDirectory = new File(getFlightDirectory(), flightId); - return FILE_FLIGHT_STORAGE_FUNCTION.apply(flightStorageDirectory); + FlightStorage flightStorage = + new FlightStorage(getFlightDirectory(), flightId); + return flightStorage; } - public Iterable<FlightStorage> getFlightStorages() { - File[] files = getFlightDirectory().listFiles( - (FileFilter) DirectoryFileFilter.DIRECTORY); - return Iterables.transform(Lists.newArrayList(files), - FILE_FLIGHT_STORAGE_FUNCTION); - } } Deleted: 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-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorages.java 2012-08-19 17:51:27 UTC (rev 439) @@ -1,96 +0,0 @@ -package fr.ulr.sammoa.application.io; -/* - * #%L - * SAMMOA :: Application - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 UMS 3462, Code Lutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ulr.sammoa.application.SammoaConfig; -import org.apache.commons.io.FileUtils; - -import java.io.File; -import java.io.IOException; - -/** - * Useful methods around {@link CampaignStorage}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.6 - */ -public class CampaignStorages { - - public static CampaignStorage getStorage(SammoaConfig config, - String campaignId) { - File directory = config.getCampaignDirectory(); - CampaignStorage result = new CampaignStorage(directory, campaignId); - return result; - } - - public static CampaignStorage createStorage(SammoaConfig config, - String campaignId) throws IOException { - File directory = config.getCampaignDirectory(); - CampaignStorage result = new CampaignStorage(directory, campaignId); - createEmptyStructure(result); - return result; - } - - public static CampaignStorage createStorage(File directory, - String campaignId) throws IOException { - CampaignStorage result = new CampaignStorage(directory, campaignId); - createEmptyStructure(result); - return result; - } - - public static CampaignStorage copyStorage(CampaignStorage source, - File targetDirectory, - boolean createCsvDirectory, - Iterable<String> flightIds) throws IOException { - - CampaignStorage target = createStorage(targetDirectory, - source.getCampaignId()); - - createEmptyStructure(target); - FileUtils.copyDirectory(source.getMapDirectory(), - target.getMapDirectory()); - if (createCsvDirectory) { - FileUtils.forceMkdir(target.getCsvDirectory()); - } - if (source.getCsvDirectory().exists()) { - FileUtils.copyDirectory(source.getCsvDirectory(), - target.getCsvDirectory()); - } - for (String flightId : flightIds) { - FlightStorage flightStorage = source.getFlightStorage(flightId); - FlightStorages.copyStorage(flightStorage, target); - } - return target; - } - - protected static void createEmptyStructure(CampaignStorage storage) throws IOException { - FileUtils.forceMkdir(storage.getDirectory()); - FileUtils.forceMkdir(storage.getFlightDirectory()); - FileUtils.forceMkdir(storage.getMapDirectory()); - } - - public static void deleteStorage(CampaignStorage storage) throws IOException { - FileUtils.deleteDirectory(storage.getDirectory()); - } -} Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-19 17:51:27 UTC (rev 439) @@ -23,14 +23,7 @@ * #L% */ -import com.google.common.base.Charsets; -import com.google.common.io.Files; -import org.apache.commons.io.IOUtils; - -import java.io.BufferedReader; import java.io.File; -import java.io.IOException; -import java.util.Properties; /** * Storage for a flight. @@ -38,56 +31,18 @@ * @author tchemit <chemit@codelutin.com> * @since 0.6 */ -public class FlightStorage { +public class FlightStorage extends SammoaStorage { - /** Root directory for this storage. */ - protected final File directory; - - /** Id of the flight. */ - protected final String flightId; - - /** Properties of the flight. */ - protected final Properties properties; - - public FlightStorage(File dataDirectory, String flightId) { - this.directory = new File(dataDirectory, flightId); - this.flightId = flightId; - this.properties = new Properties(); + FlightStorage(File dataDirectory, String id) { + super(dataDirectory, id, "flight.properties"); } - public String getFlightId() { - return flightId; - } - - public File getDirectory() { - return directory; - } - public File getAudioDirectory() { - return new File(directory, "audio"); + return new File(getDirectory(), "audio"); } public File getAudioFile(String filename) { return new File(getAudioDirectory(), filename); } - public File getPropertiesFile() { - return new File(directory, "flight.properties"); - } - - public Properties getProperties() throws IOException { - return properties; - } - - public void loadProperties() throws IOException { - BufferedReader reader = - Files.newReader(getPropertiesFile(), Charsets.UTF_8); - try { - properties.load(reader); - reader.close(); - } finally { - IOUtils.closeQuietly(reader); - } - } - } Deleted: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorages.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorages.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorages.java 2012-08-19 17:51:27 UTC (rev 439) @@ -1,61 +0,0 @@ -package fr.ulr.sammoa.application.io; -/* - * #%L - * SAMMOA :: Application - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 UMS 3462, Code Lutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import org.apache.commons.io.FileUtils; - -import java.io.IOException; - -/** - * Useful methods around {@link FlightStorage}. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.6 - */ -public class FlightStorages { - - public static FlightStorage createStorage(CampaignStorage source, - String flightId) throws IOException { - FlightStorage result = source.getFlightStorage(flightId); - createEmptyFlightStructure(result); - return result; - } - - public static FlightStorage copyStorage(FlightStorage source, - CampaignStorage target) throws IOException { - - FlightStorage result = target.getFlightStorage(source.getFlightId()); - FileUtils.copyDirectory(source.getDirectory(), result.getDirectory()); - return result; - } - - protected static void createEmptyFlightStructure(FlightStorage storage) throws IOException { - FileUtils.forceMkdir(storage.getDirectory()); - FileUtils.forceMkdir(storage.getAudioDirectory()); - } - - public static void deleteStorage(FlightStorage storage) throws IOException { - FileUtils.deleteDirectory(storage.getDirectory()); - } -} Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java (rev 0) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java 2012-08-19 17:51:27 UTC (rev 439) @@ -0,0 +1,92 @@ +package fr.ulr.sammoa.application.io; +/* + * #%L + * SAMMOA :: Application + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import org.apache.commons.io.IOUtils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.util.Properties; + +/** + * Storage for sammoa. + * + * @author tchemit <chemit@codelutin.com> + * @see CampaignStorage + * @see FlightStorage + * @since 0.6 + */ +class SammoaStorage { + + /** Root directory for this storage. */ + private final File directory; + + /** Id of the storage. */ + private final String id; + + /** Properties of the storage. */ + private final Properties properties; + + /** Name of the properties file of the storage. */ + private final String propertiesFilename; + + SammoaStorage(File dataDirectory, + String id, + String propertiesFilename) { + this.directory = new File(dataDirectory, id); + this.id = id; + this.propertiesFilename = propertiesFilename; + this.properties = new Properties(); + } + + public String getId() { + return id; + } + + public File getDirectory() { + return directory; + } + + public File getPropertiesFile() { + return new File(directory, propertiesFilename); + } + + public Properties getProperties() throws IOException { + return properties; + } + + public void loadProperties() throws IOException { + BufferedReader reader = + Files.newReader(getPropertiesFile(), Charsets.UTF_8); + try { + properties.load(reader); + reader.close(); + } finally { + IOUtils.closeQuietly(reader); + } + } +} Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java (from rev 437, trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorages.java) =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java (rev 0) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java 2012-08-19 17:51:27 UTC (rev 439) @@ -0,0 +1,128 @@ +package fr.ulr.sammoa.application.io; +/* + * #%L + * SAMMOA :: Application + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ulr.sammoa.application.SammoaTechnicalException; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.IOException; + +/** + * Useful methods around {@link SammoaStorage}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.6 + */ +public class SammoaStorages { + + public static CampaignStorage getCampaignStorage(File directory, + String campaignId) { + CampaignStorage result = new CampaignStorage(directory, campaignId); + return result; + } + + public static CampaignStorage createCampaignStorage(File directory, + String campaignId) { + try { + CampaignStorage result = new CampaignStorage(directory, campaignId); + createEmptyCampaignStructure(result); + return result; + } catch (IOException e) { + throw new SammoaTechnicalException("Could not create campaign storage", e); + } + } + + public static CampaignStorage copyCampaignStorage(CampaignStorage source, + File targetDirectory, + boolean createCsvDirectory, + Iterable<String> flightIds) { + + try { + CampaignStorage target = new CampaignStorage(targetDirectory, + source.getId()); + createEmptyCampaignStructure(target); + FileUtils.copyDirectory(source.getMapDirectory(), + target.getMapDirectory()); + + if (createCsvDirectory) { + FileUtils.forceMkdir(target.getCsvDirectory()); + } + if (source.getCsvDirectory().exists()) { + FileUtils.copyDirectory(source.getCsvDirectory(), + target.getCsvDirectory()); + } + for (String flightId : flightIds) { + FlightStorage flightStorage = source.getFlightStorage(flightId); + + FlightStorage targetFlightStorage = + target.getFlightStorage(flightStorage.getId()); + FileUtils.copyDirectory(flightStorage.getDirectory(), + targetFlightStorage.getDirectory()); + + } + return target; + } catch (IOException e) { + throw new SammoaTechnicalException("Could not copy campaign storage", e); + } + } + + public static void deleteCampaignStorage(CampaignStorage storage) { + try { + FileUtils.deleteDirectory(storage.getDirectory()); + } catch (IOException e) { + throw new SammoaTechnicalException("Could not delete campaign storage", e); + } + } + + public static FlightStorage createFlightStorage(CampaignStorage source, + String flightId) { + try { + FlightStorage result = source.getFlightStorage(flightId); + createEmptyFlightStructure(result); + return result; + } catch (IOException e) { + throw new SammoaTechnicalException("Could not create flight storage", e); + } + } + + public static void deleteFlightStorage(FlightStorage storage) { + try { + FileUtils.deleteDirectory(storage.getDirectory()); + } catch (IOException e) { + throw new SammoaTechnicalException("Could not delete flight storage", e); + } + } + + protected static void createEmptyCampaignStructure(CampaignStorage storage) throws IOException { + FileUtils.forceMkdir(storage.getDirectory()); + FileUtils.forceMkdir(storage.getFlightDirectory()); + FileUtils.forceMkdir(storage.getMapDirectory()); + } + + protected static void createEmptyFlightStructure(FlightStorage storage) throws IOException { + FileUtils.forceMkdir(storage.getDirectory()); + FileUtils.forceMkdir(storage.getAudioDirectory()); + } +} Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native 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-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java 2012-08-19 17:51:27 UTC (rev 439) @@ -645,7 +645,6 @@ } - protected void fillDateRecord(Date date, Map<String, Object> record) { record.put("DATE", date); record.put("HHMMSS", timeFormat.format(date)); 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-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationService.java 2012-08-19 17:51:27 UTC (rev 439) @@ -28,7 +28,7 @@ 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.application.io.SammoaStorages; import fr.ulr.sammoa.persistence.Flight; import fr.ulr.sammoa.persistence.GeoPoint; import fr.ulr.sammoa.persistence.Observation; @@ -37,6 +37,7 @@ import fr.ulr.sammoa.persistence.SammoaDbMetas; import fr.ulr.sammoa.persistence.SammoaEntityEnum; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; @@ -79,7 +80,7 @@ private static final TimeLog TIME_LOG = new TimeLog(ExportApplicationService.class); - public void exportApplication(ExportApplicationModel model) throws IOException { + public void exportApplication(ExportApplicationModel model) { Preconditions.checkNotNull(model); Preconditions.checkNotNull(model.getExportFile()); Preconditions.checkNotNull(model.getCampaignId()); @@ -94,7 +95,7 @@ String campaignId = model.getCampaignId(); - CampaignStorage storage = CampaignStorages.getStorage(config, campaignId); + CampaignStorage storage = getCampaignStorage(campaignId); File targetDirectory = new File(config.getTmpDirectory(), "exportSammoa-" + System.nanoTime()); @@ -105,7 +106,7 @@ Iterable<String> flightIds = model.getFlightIds(); - CampaignStorage targetStorage = CampaignStorages.copyStorage( + CampaignStorage targetStorage = SammoaStorages.copyCampaignStorage( storage, targetDirectory, true, flightIds); @@ -169,7 +170,7 @@ protected void exportData(TopiaContext tx, File csvDirectory, - Iterable<String> flightIds) throws IOException { + Iterable<String> flightIds) { DbMeta<SammoaEntityEnum> dbMetas = persistence.getDbMetas(); @@ -205,7 +206,7 @@ } } finally { - exportVisitor.close(); + IOUtils.closeQuietly(exportVisitor); } } @@ -247,16 +248,20 @@ protected void compressZipFile(File zipFile, File directory, - boolean delete) throws IOException { + boolean delete) { - FileUtils.forceMkdir(zipFile.getParentFile()); + try { + FileUtils.forceMkdir(zipFile.getParentFile()); - try { - ZipUtil.compress(zipFile, directory); - } finally { - if (delete) { - FileUtils.deleteDirectory(directory); + try { + ZipUtil.compress(zipFile, directory); + } finally { + if (delete) { + FileUtils.deleteDirectory(directory); + } } + } catch (IOException e) { + throw new SammoaTechnicalException("Could not compress directory", e); } } Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java 2012-08-19 17:51:27 UTC (rev 439) @@ -28,6 +28,7 @@ import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import org.apache.commons.collections.CollectionUtils; import org.nuiton.util.DateUtil; import org.nuiton.util.PeriodDates; @@ -35,6 +36,7 @@ import java.util.Date; import java.util.Iterator; import java.util.List; +import java.util.Set; /** * Created: 16/07/12 @@ -48,11 +50,11 @@ } public static Iterable<Date> toDates(Iterable<Observation> observations) { - return Iterables.transform(observations, toDate()); + return Iterables.transform(observations, TO_DATE_FUNCTION); } - public static Function<Observation, Date> toDate() { - return TO_DATE_FUNCTION; + public static Set<ObserverPosition> toObserverPositions(Iterable<Observation> observations) { + return Sets.newHashSet(Iterables.transform(observations, TO_OBSERVER_POSITION_FUNCTION)); } public static boolean inRoute(Observation observation, Route route, Route nextRoute) { @@ -92,6 +94,13 @@ } }; + protected static Function<Observation, ObserverPosition> TO_OBSERVER_POSITION_FUNCTION = new Function<Observation, ObserverPosition>() { + + @Override + public ObserverPosition apply(Observation input) { + return input.getObserverPosition(); + } + }; public static List<Observation> retainsObservations(List<Observation> observations, PeriodDates periodDate) { Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-08-19 17:51:27 UTC (rev 439) @@ -26,10 +26,12 @@ import com.google.common.base.Function; import com.google.common.base.Objects; import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; import org.apache.commons.collections.CollectionUtils; import java.util.Date; import java.util.List; +import java.util.Set; /** * Created: 16/07/12 @@ -51,9 +53,21 @@ } public static Iterable<Date> toDates(Iterable<Route> routes) { - return Iterables.transform(routes, toDate()); + return Iterables.transform(routes, TO_DATE_FUNCTION); } + public static Iterable<TransectFlight> toTransectFlights(Iterable<Route> routes) { + return Iterables.transform(routes, TO_TRANSECT_FLIGHT_FUNCTION); + } + + public static Set<ObserverPosition> toObserverPositions(Iterable<Route> routes) { + Set<ObserverPosition> result = Sets.newHashSet(); + for (Route route : routes) { + result.addAll(route.getObserverPosition()); + } + return result; + } + public static boolean isRouteAccepted(Route route, List<RouteType> routeTypes, List<Strate> strates) { @@ -74,10 +88,6 @@ return result; } - public static Function<Route, Date> toDate() { - return TO_DATE_FUNCTION; - } - protected static Function<Route, Date> TO_DATE_FUNCTION = new Function<Route, Date>() { @Override @@ -86,6 +96,14 @@ } }; + protected static Function<Route, TransectFlight> TO_TRANSECT_FLIGHT_FUNCTION = new Function<Route, TransectFlight>() { + + @Override + public TransectFlight apply(Route input) { + return input.getTransectFlight(); + } + }; + public static boolean equal(Route o1, Route o2) { boolean result = Objects.equal(o1.getRouteType(), o2.getRouteType()); Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java 2012-08-19 17:51:27 UTC (rev 439) @@ -1,4 +1,27 @@ package fr.ulr.sammoa.persistence; +/* + * #%L + * SAMMOA :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ import com.google.common.collect.Lists; import com.google.common.collect.Multimap; Property changes on: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java 2012-08-19 17:51:27 UTC (rev 439) @@ -155,6 +155,11 @@ this.rootContext = rootContext; } + /** + * Destroy the current db (only works for h2 db). + * + * @since 0.6 + */ public void destroyDb() { autoSaveListener.stop(); if (rootContext != null) { @@ -165,7 +170,6 @@ // clean root context setRootContext(null); } catch (TopiaException e) { - throw new TopiaRuntimeException(e); } } Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlights.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlights.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlights.java 2012-08-19 17:51:27 UTC (rev 439) @@ -2,8 +2,8 @@ /* * #%L * SAMMOA :: Persistence - * $Id:$ - * $HeadURL:$ + * $Id$ + * $HeadURL$ * %% * Copyright (C) 2012 UMS 3462, Code Lutin * %% @@ -26,7 +26,10 @@ import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Predicates; +import com.google.common.collect.Sets; +import java.util.Set; + /** * Created: 11/07/12 * @@ -38,6 +41,16 @@ // static class do not have instanciation } + public static Set<ObserverPosition> toObserverPositions(Iterable<TransectFlight> transectFlights) { + Set<ObserverPosition> result = Sets.newHashSet(); + for (TransectFlight transectFlight : transectFlights) { + if (transectFlight != null) { + result.addAll(transectFlight.getObserverPosition()); + } + } + return result; + } + public static Predicate<TransectFlight> isNotDeleted() { return Predicates.not(isDeleted()); } @@ -45,7 +58,7 @@ public static Predicate<TransectFlight> isDeleted() { return IS_DELETED_PREDICATE; } - + public static Function<TransectFlight, Transect> toTransect() { return TO_TRANSECT_FUNCTION; } @@ -53,18 +66,18 @@ protected static Function<TransectFlight, Transect> TO_TRANSECT_FUNCTION = new Function<TransectFlight, Transect>() { - @Override - public Transect apply(TransectFlight input) { - return input.getTransect(); - } - }; - + @Override + public Transect apply(TransectFlight input) { + return input.getTransect(); + } + }; + protected static Predicate<TransectFlight> IS_DELETED_PREDICATE = new Predicate<TransectFlight>() { - @Override - public boolean apply(TransectFlight input) { - return input.isDeleted(); - } - }; + @Override + public boolean apply(TransectFlight input) { + return input.isDeleted(); + } + }; } Modified: trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java =================================================================== --- trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java 2012-08-19 17:51:27 UTC (rev 439) @@ -1,4 +1,27 @@ package fr.ulr.sammoa.persistence; +/* + * #%L + * SAMMOA :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ import com.google.common.collect.Multimap; import org.junit.Assert; Property changes on: trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUIHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUIHandler.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/campaign/CampaignUIHandler.java 2012-08-19 17:51:27 UTC (rev 439) @@ -26,7 +26,6 @@ import fr.ulr.sammoa.application.FlightService; import fr.ulr.sammoa.application.ReferentialService; import fr.ulr.sammoa.application.io.CampaignStorage; -import fr.ulr.sammoa.application.io.CampaignStorages; import fr.ulr.sammoa.application.io.input.csv.ImportCsvService; import fr.ulr.sammoa.application.io.input.map.ImportMapService; import fr.ulr.sammoa.application.io.input.map.ShpImporter; @@ -188,8 +187,8 @@ String campaignId = referentialService.saveCampaign(campaign); getModel().setId(campaignId); - CampaignStorage campaignStorage = CampaignStorages.getStorage( - context.getConfig(), campaignId); + CampaignStorage campaignStorage = + referentialService.getCampaignStorage(campaignId); File strateFile = ui.getStrateFileEditor().getSelectedFile(); if (strateFile != null && strateFile.exists()) { @@ -306,7 +305,7 @@ protected ShpImporter<Strate> strateImporter = new ShpImporter<Strate>(new StrateImportModel(), "strates") { protected String onDbfLoaded(Iterable<Strate> elements, CampaignStorage storage) { - int nbImported = importMapService.importStrates(storage.getCampaignId(), elements); + int nbImported = importMapService.importStrates(storage.getId(), elements); return _("sammoa.messageDialog.strates.import.success", nbImported); } @@ -316,7 +315,7 @@ @Override protected String onDbfLoaded(Iterable<Transect> elements, CampaignStorage storage) { - int nbImported = importMapService.importTransects(storage.getCampaignId(), elements); + int nbImported = importMapService.importTransects(storage.getId(), elements); return _("sammoa.messageDialog.transects.import.success", nbImported); } 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-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-19 17:51:27 UTC (rev 439) @@ -63,7 +63,6 @@ import fr.ulr.sammoa.application.flightController.FlightState; import fr.ulr.sammoa.application.flightController.ObservationEvent; 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; @@ -735,8 +734,8 @@ } String campaignId = getModel().getFlight().getCampaign().getTopiaId(); - CampaignStorage campaignStorage = CampaignStorages.getStorage( - config, campaignId); + CampaignStorage campaignStorage = + referentialService.getCampaignStorage(campaignId); // StrateLayer { @@ -816,7 +815,7 @@ List<GeoPoint> geoPoints = GeoPoints.getClosestPoints( getModel().getGeoPoints(), - Iterables.transform(getModel().getObservations(), Observations.toDate()) + Observations.toDates(getModel().getObservations()) ); observationLayer.setGeoPoints(geoPoints); Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/java-info.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/java-info.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/java-info.java 2012-08-19 17:51:27 UTC (rev 439) @@ -2,4 +2,27 @@ * Base package for all input operations (says all imports). * @since 0.6 */ -package fr.ulr.sammoa.ui.swing.io.input; \ No newline at end of file +package fr.ulr.sammoa.ui.swing.io.input; +/* + * #%L + * SAMMOA :: UI Swing + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/java-info.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUI.css =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUI.css 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUI.css 2012-08-19 17:51:27 UTC (rev 439) @@ -1,3 +1,26 @@ +/* + * #%L + * SAMMOA :: UI Swing + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ #importFileLbl { text: "sammoa.label.importApplicationFile"; } Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUI.css ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUI.jaxx =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUI.jaxx 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUI.jaxx 2012-08-19 17:51:27 UTC (rev 439) @@ -1,8 +1,8 @@ <!-- #%L SAMMOA :: UI Swing - $Id: ExportApplicationUI.jaxx 414 2012-08-13 22:12:51Z tchemit $ - $HeadURL: http://svn.forge.codelutin.com/svn/sammoa/trunk/sammoa-ui-swing/src/main/jav... $ + $Id$ + $HeadURL$ %% Copyright (C) 2012 UMS 3462, Code Lutin %% Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUI.jaxx ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUIHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUIHandler.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUIHandler.java 2012-08-19 17:51:27 UTC (rev 439) @@ -1,4 +1,27 @@ package fr.ulr.sammoa.ui.swing.io.input.sammoa; +/* + * #%L + * SAMMOA :: UI Swing + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ import fr.ulr.sammoa.application.FlightService; import fr.ulr.sammoa.application.ReferentialService; Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUIHandler.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUIModel.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUIModel.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUIModel.java 2012-08-19 17:51:27 UTC (rev 439) @@ -3,7 +3,7 @@ * #%L * SAMMOA :: UI Swing * $Id$ - * $HeadURL:$ + * $HeadURL$ * %% * Copyright (C) 2012 UMS 3462, Code Lutin * %% Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/ImportApplicationUIModel.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/java-info.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/java-info.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/java-info.java 2012-08-19 17:51:27 UTC (rev 439) @@ -3,4 +3,27 @@ * * @since 0.6 */ -package fr.ulr.sammoa.ui.swing.io.input.sammoa; \ No newline at end of file +package fr.ulr.sammoa.ui.swing.io.input.sammoa; +/* + * #%L + * SAMMOA :: UI Swing + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/java-info.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/java-info.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/java-info.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/java-info.java 2012-08-19 17:51:27 UTC (rev 439) @@ -4,4 +4,27 @@ * * @since 0.6 */ -package fr.ulr.sammoa.ui.swing.io; \ No newline at end of file +package fr.ulr.sammoa.ui.swing.io; +/* + * #%L + * SAMMOA :: UI Swing + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/java-info.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/java-info.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/java-info.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/java-info.java 2012-08-19 17:51:27 UTC (rev 439) @@ -3,4 +3,27 @@ * * @since 0.6 */ -package fr.ulr.sammoa.ui.swing.io.output.map; \ No newline at end of file +package fr.ulr.sammoa.ui.swing.io.output.map; +/* + * #%L + * SAMMOA :: UI Swing + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/java-info.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL 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-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUIHandler.java 2012-08-19 17:51:27 UTC (rev 439) @@ -233,14 +233,15 @@ } protected void removeFlights(ExportApplicationModel model) { + String campaignId = model.getCampaignId(); + Iterable<String> flightIds = model.getFlightIds(); if (logger.isInfoEnabled()) { - logger.info("Will remove selected flights for campaign {}", - model.getCampaignId()); + logger.info("Will remove selected flights for campaign {}: {}", + campaignId, flightIds); } - FlightService service = context.newService(FlightService.class); - for (String flightId : model.getFlightIds()) { - service.deleteFlight(flightId); + for (String flightId : flightIds) { + flightService.deleteFlight(campaignId, flightId); } } @@ -249,8 +250,7 @@ logger.info("Will remove campaign data {}", model.getCampaignId()); } - ReferentialService service = context.newService(ReferentialService.class); - service.deleteCampaign(model.getCampaignId()); + referentialService.deleteCampaign(model.getCampaignId()); } protected void removeAllData() { @@ -258,8 +258,7 @@ logger.info("Will remove all data from current db (create a new db...)"); } - ReferentialService service = context.newService(ReferentialService.class); - service.deleteAllData(); + referentialService.deleteAllData(); } protected void validateModel() { Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/java-info.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/java-info.java 2012-08-19 14:47:01 UTC (rev 438) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/java-info.java 2012-08-19 17:51:27 UTC (rev 439) @@ -3,4 +3,27 @@ * * @since 0.6 */ -package fr.ulr.sammoa.ui.swing.io.output.sammoa; \ No newline at end of file +package fr.ulr.sammoa.ui.swing.io.output.sammoa; +/* + * #%L + * SAMMOA :: UI Swing + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 UMS 3462, Code Lutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/java-info.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL