Sammoa-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- 446 discussions
r455 - in trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application: flightController io
by fdesbois@users.forge.codelutin.com 22 Aug '12
by fdesbois@users.forge.codelutin.com 22 Aug '12
22 Aug '12
Author: fdesbois
Date: 2012-08-22 10:37:49 +0200 (Wed, 22 Aug 2012)
New Revision: 455
Url: http://forge.codelutin.com/repositories/revision/sammoa/455
Log:
Move audioFile construction in FlightStorage
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java
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-21 16:12:32 UTC (rev 454)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java 2012-08-22 08:37:49 UTC (rev 455)
@@ -782,14 +782,9 @@
protected void saveAudio(long delay) {
- String fileName = String.format(
- "%1$tF-%1$tH-%1$tM-%1$tS.%2$s.%3$s",
- currentRoute.getBeginTime(),
- currentRoute.getTopiaId(),
- getAudioRecorder().getOutputType().getExtension()
- );
+ String extension = getAudioRecorder().getOutputType().getExtension();
- File audioFile = flightStorage.getAudioFile(fileName);
+ File audioFile = flightStorage.getAudioFile(currentRoute, extension);
getAudioRecorder().record(audioFile, delay);
}
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-21 16:12:32 UTC (rev 454)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-22 08:37:49 UTC (rev 455)
@@ -29,6 +29,7 @@
import fr.ulr.sammoa.persistence.Flight;
import fr.ulr.sammoa.persistence.Region;
import org.apache.commons.lang3.builder.ToStringBuilder;
+import fr.ulr.sammoa.persistence.Route;
import org.nuiton.util.decorator.Decorator;
import java.io.File;
@@ -52,8 +53,16 @@
return new File(getDirectory(), "audio");
}
- public File getAudioFile(String filename) {
- return new File(getAudioDirectory(), filename);
+ public File getAudioFile(Route route, String ext) {
+
+ String fileName = String.format(
+ "%1$tF-%1$tH-%1$tM-%1$tS.%2$s.%3$s",
+ route.getBeginTime(),
+ route.getTopiaId(),
+ ext
+ );
+
+ return new File(getAudioDirectory(), fileName);
}
@Override
1
0
21 Aug '12
Author: tchemit
Date: 2012-08-21 18:12:32 +0200 (Tue, 21 Aug 2012)
New Revision: 454
Url: http://forge.codelutin.com/repositories/revision/sammoa/454
Log:
refs #1269: Import/Export base H2 (begin of import (referential are ok now)) + use last api from topia
Added:
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightImportEntry.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightTableModel.java
trunk/sammoa-ui-swing/src/main/resources/icons/action-information.png
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/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/SammoaStorage.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.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/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/StartApp.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java
trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties
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-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/FlightService.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -970,4 +970,17 @@
}
}
}
+
+ public Flight getFlightByNaturalId(Map<String, Object> naturalId) {
+ TopiaContext tx = beginTransaction();
+ try {
+ FlightDAO dao = SammoaDAOHelper.getFlightDAO(tx);
+ Flight result = dao.findByProperties(naturalId);
+ return result;
+ } catch (TopiaException e) {
+ throw new SammoaTechnicalException(e);
+ } finally {
+ endTransaction(tx);
+ }
+ }
}
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-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -55,6 +55,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -64,6 +65,10 @@
*/
public class ReferentialService extends SammoaServiceSupport {
+ //------------------------------------------------------------------------//
+ //-- Region methods ------------------------------------------------------//
+ //------------------------------------------------------------------------//
+
public List<Region> getRegions() {
TopiaContext transaction = beginTransaction();
@@ -128,6 +133,45 @@
}
}
+ //------------------------------------------------------------------------//
+ //-- Species methods -----------------------------------------------------//
+ //------------------------------------------------------------------------//
+
+ public List<Species> getAllSpecies(Campaign campaign) {
+ Preconditions.checkNotNull(campaign);
+
+ TopiaContext transaction = beginTransaction();
+ try {
+ SpeciesDAO dao = SammoaDAOHelper.getSpeciesDAO(transaction);
+ List<Species> result = dao.findAllByRegion(campaign.getRegion());
+ return result;
+
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ } finally {
+ endTransaction(transaction);
+ }
+ }
+
+ public Collection<Species> getAllValidSpecies() {
+
+ TopiaContext transaction = beginTransaction();
+ try {
+
+ SpeciesDAO dao = SammoaDAOHelper.getSpeciesDAO(transaction);
+ Collection<Species> result = dao.findAllByLocalCreation(false);
+ return result;
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ } finally {
+ endTransaction(transaction);
+ }
+ }
+
+ //------------------------------------------------------------------------//
+ //-- Campaign methods ----------------------------------------------------//
+ //------------------------------------------------------------------------//
+
public List<Campaign> getCampaigns() {
TopiaContext transaction = beginTransaction();
@@ -144,6 +188,34 @@
}
}
+ public Campaign getCampaignByNaturalId(Map<String, Object> naturalId) {
+ TopiaContext tx = beginTransaction();
+ try {
+ CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(tx);
+ Campaign result = dao.findByProperties(naturalId);
+ return result;
+ } catch (TopiaException e) {
+ throw new SammoaTechnicalException(e);
+ } finally {
+ endTransaction(tx);
+ }
+ }
+
+ public Campaign getCampaign(String topiaId) {
+ Preconditions.checkNotNull(topiaId);
+
+ TopiaContext transaction = beginTransaction();
+ try {
+ CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(transaction);
+ Campaign result = dao.findByTopiaId(topiaId);
+ return result;
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ } finally {
+ endTransaction(transaction);
+ }
+ }
+
public String saveCampaign(Campaign campaign) {
Preconditions.checkNotNull(campaign);
@@ -205,21 +277,73 @@
}
}
- public Campaign getCampaign(String topiaId) {
- Preconditions.checkNotNull(topiaId);
+ public void deleteCampaign(String campaignId) {
+ Preconditions.checkNotNull(campaignId);
- TopiaContext transaction = beginTransaction();
+ TopiaContext tx = beginTransaction();
try {
- CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(transaction);
- Campaign result = dao.findByTopiaId(topiaId);
- return result;
+ CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(tx);
+
+ Campaign campaign = dao.findByTopiaId(campaignId);
+
+ Preconditions.checkNotNull(campaign);
+
+ FlightService flightService = getService(FlightService.class);
+
+ // delete all flights from db
+ List<Flight> flights = flightService.getFlights(tx, campaign);
+
+ for (Flight flight : flights) {
+ flightService.deleteFlightInDb(tx, flight.getTopiaId());
+ }
+
+ // 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) {
+ positions.addAll(observerPositionDAO.findAllByObserver(observer));
+ }
+ observerDAO.deleteAll(observers);
+ observerPositionDAO.deleteAll(positions);
+
+ // delete transects
+ List<Transect> transects = getAllTransects(tx, campaign);
+ TransectDAO transectDAO = SammoaDAOHelper.getTransectDAO(tx);
+ transectDAO.deleteAll(transects);
+
+ // delete strates
+ List<Strate> strates = getAllStrates(tx, campaign);
+ StrateDAO strateDAO = SammoaDAOHelper.getStrateDAO(tx);
+ strateDAO.deleteAll(strates);
+
+ // delete sectors
+ SectorDAO sectorDAO = SammoaDAOHelper.getSectorDAO(tx);
+ List<Sector> sectors = sectorDAO.findAllByCampaign(campaign);
+ sectorDAO.deleteAll(sectors);
+
+ // delete campaign
+ dao.delete(campaign);
+
+ // commit
+ tx.commitTransaction();
+
} catch (TopiaException e) {
- throw new TopiaRuntimeException(e);
+ throw new SammoaTechnicalException(e);
} finally {
- endTransaction(transaction);
+ endTransaction(tx);
}
+
+ // delete campaign storage
+ deleteCampaignStorage(campaignId);
}
+ //------------------------------------------------------------------------//
+ //-- Transect methods ----------------------------------------------------//
+ //------------------------------------------------------------------------//
+
public List<Transect> getAllTransects(Campaign campaign) {
Preconditions.checkNotNull(campaign);
@@ -247,63 +371,23 @@
}
}
- public List<Strate> getAllStrates(Campaign campaign) {
- Preconditions.checkNotNull(campaign);
+ public Transect getTransect(String transectId) {
+ Preconditions.checkNotNull(transectId);
TopiaContext transaction = beginTransaction();
try {
- List<Strate> result = getAllStrates(transaction, campaign);
- return result;
- } finally {
- endTransaction(transaction);
- }
- }
-
- public List<Strate> getAllStrates(TopiaContext tx, Campaign campaign) {
- Preconditions.checkNotNull(tx);
- Preconditions.checkNotNull(campaign);
-
- try {
- StrateDAO dao = SammoaDAOHelper.getStrateDAO(tx);
- List<Strate> result = dao.findAllByCampaignOrderedByCode(campaign);
+ TransectDAO dao = SammoaDAOHelper.getTransectDAO(transaction);
+ Transect result = dao.findByTopiaId(transectId);
return result;
} catch (TopiaException e) {
throw new TopiaRuntimeException(e);
- }
- }
- public List<Species> getAllSpecies(Campaign campaign) {
- Preconditions.checkNotNull(campaign);
-
- TopiaContext transaction = beginTransaction();
- try {
- SpeciesDAO dao = SammoaDAOHelper.getSpeciesDAO(transaction);
- List<Species> result = dao.findAllByRegion(campaign.getRegion());
- return result;
-
- } catch (TopiaException e) {
- throw new TopiaRuntimeException(e);
} finally {
endTransaction(transaction);
}
}
- public Collection<Species> getAllValidSpecies() {
-
- TopiaContext transaction = beginTransaction();
- try {
-
- SpeciesDAO dao = SammoaDAOHelper.getSpeciesDAO(transaction);
- Collection<Species> result = dao.findAllByLocalCreation(false);
- return result;
- } catch (TopiaException e) {
- throw new TopiaRuntimeException(e);
- } finally {
- endTransaction(transaction);
- }
- }
-
public String createTransect(Transect transect) {
Preconditions.checkNotNull(transect);
@@ -334,23 +418,40 @@
}
}
- public Transect getTransect(String transectId) {
- Preconditions.checkNotNull(transectId);
+ //------------------------------------------------------------------------//
+ //-- Strate methods ------------------------------------------------------//
+ //------------------------------------------------------------------------//
+ public List<Strate> getAllStrates(Campaign campaign) {
+ Preconditions.checkNotNull(campaign);
+
TopiaContext transaction = beginTransaction();
try {
-
- TransectDAO dao = SammoaDAOHelper.getTransectDAO(transaction);
- Transect result = dao.findByTopiaId(transectId);
+ List<Strate> result = getAllStrates(transaction, campaign);
return result;
- } catch (TopiaException e) {
- throw new TopiaRuntimeException(e);
} finally {
endTransaction(transaction);
}
}
+ public List<Strate> getAllStrates(TopiaContext tx, Campaign campaign) {
+ Preconditions.checkNotNull(tx);
+ Preconditions.checkNotNull(campaign);
+
+ try {
+ StrateDAO dao = SammoaDAOHelper.getStrateDAO(tx);
+ List<Strate> result = dao.findAllByCampaignOrderedByCode(campaign);
+ return result;
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ }
+ }
+
+ //------------------------------------------------------------------------//
+ //-- Observer methods ----------------------------------------------------//
+ //------------------------------------------------------------------------//
+
public List<Observer> getAllObservers(Campaign campaign) {
Preconditions.checkNotNull(campaign);
@@ -372,69 +473,8 @@
}
}
- public void deleteCampaign(String campaignId) {
- Preconditions.checkNotNull(campaignId);
- TopiaContext tx = beginTransaction();
- try {
- CampaignDAO dao = SammoaDAOHelper.getCampaignDAO(tx);
- Campaign campaign = dao.findByTopiaId(campaignId);
-
- Preconditions.checkNotNull(campaign);
-
- FlightService flightService = getService(FlightService.class);
-
- // delete all flights from db
- List<Flight> flights = flightService.getFlights(tx, campaign);
-
- for (Flight flight : flights) {
- flightService.deleteFlightInDb(tx, flight.getTopiaId());
- }
-
- // 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) {
- positions.addAll(observerPositionDAO.findAllByObserver(observer));
- }
- observerDAO.deleteAll(observers);
- observerPositionDAO.deleteAll(positions);
-
- // delete transects
- List<Transect> transects = getAllTransects(tx, campaign);
- TransectDAO transectDAO = SammoaDAOHelper.getTransectDAO(tx);
- transectDAO.deleteAll(transects);
-
- // delete strates
- List<Strate> strates = getAllStrates(tx, campaign);
- StrateDAO strateDAO = SammoaDAOHelper.getStrateDAO(tx);
- strateDAO.deleteAll(strates);
-
- // delete sectors
- SectorDAO sectorDAO = SammoaDAOHelper.getSectorDAO(tx);
- List<Sector> sectors = sectorDAO.findAllByCampaign(campaign);
- sectorDAO.deleteAll(sectors);
-
- // delete campaign
- dao.delete(campaign);
-
- // commit
- tx.commitTransaction();
-
- } catch (TopiaException e) {
- throw new SammoaTechnicalException(e);
- } finally {
- endTransaction(tx);
- }
-
- // delete campaign storage
- deleteCampaignStorage(campaignId);
- }
-
public void deleteAllData() {
Iterable<String> campaignIds;
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-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -23,13 +23,23 @@
* #L%
*/
+import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import fr.ulr.sammoa.application.DecoratorService;
import fr.ulr.sammoa.persistence.Campaign;
+import fr.ulr.sammoa.persistence.Region;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
+import org.apache.commons.lang3.builder.ToStringBuilder;
import org.nuiton.util.decorator.Decorator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.File;
+import java.util.Iterator;
+import java.util.Map;
import java.util.Set;
/**
@@ -38,10 +48,16 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.6
*/
-public class CampaignStorage extends SammoaStorage<Campaign> {
+public class CampaignStorage extends SammoaStorage<Campaign> implements Iterable<FlightStorage> {
private static final long serialVersionUID = 1L;
+ /** Logger. */
+ private static final Logger logger =
+ LoggerFactory.getLogger(CampaignStorage.class);
+
+ protected Map<String, FlightStorage> flightStorages;
+
CampaignStorage(File dataDirectory, String id) {
super(dataDirectory, id, "campaign.properties");
}
@@ -64,14 +80,20 @@
public Set<String> getFlightIds() {
String[] files = getFlightDirectory().list(DirectoryFileFilter.INSTANCE);
- Set<String> result = Sets.newHashSet(files);
+ Set<String> result = files == null ?
+ Sets.<String>newHashSet() : Sets.newHashSet(files);
return result;
}
public FlightStorage getFlightStorage(String flightId) {
- FlightStorage flightStorage =
- new FlightStorage(getFlightDirectory(), flightId);
- return flightStorage;
+ Preconditions.checkNotNull(flightId);
+ FlightStorage result = getFlightStorages().get(flightId);
+ if (result == null) {
+
+ // create this new flight storage
+ addFlightInStore(result = getFlightToStorage().apply(flightId));
+ }
+ return result;
}
@Override
@@ -81,7 +103,63 @@
Decorator<Campaign> decorator =
decoratorService.getDecoratorByType(Campaign.class);
- String campaignName = decorator.toString(campaign);
- getProperties().put("name", campaignName);
+ putInProperties("name", decorator.toString(campaign));
+ putInProperties(Campaign.PROPERTY_CODE, campaign.getCode());
+ putInProperties(Campaign.PROPERTY_REGION + "." +
+ Region.PROPERTY_CODE, campaign.getRegion().getCode());
}
+
+ @Override
+ public Map<String, Object> getNaturalId() {
+ Map<String, Object> result = Maps.newHashMap();
+ addInMap(Campaign.PROPERTY_CODE, result);
+ addInMap(Campaign.PROPERTY_REGION + "." + Region.PROPERTY_CODE, result);
+ return result;
+ }
+
+ @Override
+ public Iterator<FlightStorage> iterator() {
+ return getFlightStorages().values().iterator();
+ }
+
+ protected Map<String, FlightStorage> getFlightStorages() {
+ if (flightStorages == null) {
+
+ flightStorages = Maps.newTreeMap();
+ for (FlightStorage s : Iterables.transform(getFlightIds(), getFlightToStorage())) {
+ addFlightInStore(s);
+ }
+ }
+ return flightStorages;
+ }
+
+ protected transient Function<String, FlightStorage> flightToStorage;
+
+ protected Function<String, FlightStorage> getFlightToStorage() {
+ if (flightToStorage == null) {
+ flightToStorage = new Function<String, FlightStorage>() {
+ @Override
+ public FlightStorage apply(String input) {
+ return new FlightStorage(getFlightDirectory(), input);
+ }
+ };
+ }
+ return flightToStorage;
+ }
+
+ protected void addFlightInStore(FlightStorage flightStorage) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Add flightStorage {} to store {}", flightStorage, this);
+ }
+ flightStorages.put(flightStorage.getId(), flightStorage);
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this).
+ append("directory", getDirectory()).
+ append("id", getId()).
+ append("nbFlightStoragesLoaded", flightStorages == null ? 0 : flightStorages.size()).
+ toString();
+ }
}
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-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -23,12 +23,16 @@
* #L%
*/
+import com.google.common.collect.Maps;
import fr.ulr.sammoa.application.DecoratorService;
+import fr.ulr.sammoa.persistence.Campaign;
import fr.ulr.sammoa.persistence.Flight;
+import fr.ulr.sammoa.persistence.Region;
+import org.apache.commons.lang3.builder.ToStringBuilder;
import org.nuiton.util.decorator.Decorator;
import java.io.File;
-import java.util.Properties;
+import java.util.Map;
/**
* Storage for a flight.
@@ -53,13 +57,33 @@
}
@Override
+ public Map<String, Object> getNaturalId() {
+ Map<String, Object> result = Maps.newHashMap();
+ addInMap(Flight.PROPERTY_SYSTEM_ID, result);
+ addIntInMap(Flight.PROPERTY_FLIGHT_NUMBER, result);
+ addInMap(Flight.PROPERTY_CAMPAIGN + "." + Campaign.PROPERTY_CODE, result);
+ addInMap(Flight.PROPERTY_CAMPAIGN + "." + Campaign.PROPERTY_REGION + "." + Region.PROPERTY_CODE, result);
+ return result;
+ }
+
+ @Override
public void fillProperties(Flight flight,
DecoratorService decoratorService) {
- Properties properties = getProperties();
Decorator<Flight> decorator =
decoratorService.getDecoratorByType(Flight.class);
- String flightName = decorator.toString(flight);
- properties.put("name", flightName);
+ putInProperties("name", decorator.toString(flight));
+ putInProperties(Flight.PROPERTY_SYSTEM_ID, flight.getSystemId());
+ putInProperties(Flight.PROPERTY_FLIGHT_NUMBER, flight.getFlightNumber());
+ putInProperties(Flight.PROPERTY_CAMPAIGN + "." + Campaign.PROPERTY_CODE, flight.getCampaign().getCode());
+ putInProperties(Flight.PROPERTY_CAMPAIGN + "." + Campaign.PROPERTY_REGION + "." + Region.PROPERTY_CODE, flight.getCampaign().getRegion().getCode());
}
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this).
+ append("directory", getDirectory()).
+ append("id", getId()).
+ toString();
+ }
}
Modified: 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 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -34,6 +34,7 @@
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
+import java.util.Map;
import java.util.Properties;
/**
@@ -60,8 +61,11 @@
/** Name of the properties file of the storage. */
private final String propertiesFilename;
- public abstract void fillProperties(E entity, DecoratorService decoratorService);
+ public abstract Map<String, Object> getNaturalId();
+ public abstract void fillProperties(E entity,
+ DecoratorService decoratorService);
+
SammoaStorage(File dataDirectory,
String id,
String propertiesFilename) {
@@ -111,4 +115,22 @@
public void delete() throws IOException {
FileUtils.deleteDirectory(getDirectory());
}
+
+ protected void addInMap(String key, Map<String, Object> result) {
+ String property = getProperties().getProperty(key);
+ result.put(key, property);
+ }
+
+ protected void addIntInMap(String key, Map<String, Object> result) {
+ String property = getProperties().getProperty(key);
+ result.put(key, Integer.valueOf(property));
+ }
+
+ protected void putInProperties(String key, Object value) {
+ getProperties().put(key, String.valueOf(value));
+ }
+
+ public String getName() {
+ return getProperties().getProperty("name");
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorages.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -109,4 +109,18 @@
FileUtils.forceMkdir(storage.getDirectory());
FileUtils.forceMkdir(storage.getAudioDirectory());
}
+
+ public static void loadProperties(CampaignStorage storage) {
+
+ try {
+ storage.loadProperties();
+
+ for (FlightStorage flightStorage : storage) {
+ flightStorage.loadProperties();
+ }
+ } catch (IOException e) {
+ throw new SammoaTechnicalException(
+ "Could not load storage properties file", e);
+ }
+ }
}
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -24,38 +24,36 @@
* #L%
*/
-import com.google.common.collect.Lists;
+import fr.ulr.sammoa.application.io.CampaignStorage;
-import java.io.File;
-import java.util.List;
-
/**
- * Model of sammoa import.
+ * Model of application import.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 0.6
*/
public class ImportApplicationModel {
- public static ImportApplicationModel newModel(File importFile,
- List<String> flightIds) {
+ public static ImportApplicationModel newModel(CampaignStorage storage,
+ Iterable<String> flightIds) {
ImportApplicationModel result = new ImportApplicationModel();
- result.importFile = importFile;
- result.flightIds = Lists.newArrayList(flightIds);
+ result.storage = storage;
+ result.flightIds = flightIds;
return result;
}
- /** Import file that contains all the stuff to import. */
- protected File importFile;
+ /** Loaded campaign storage. */
+ protected CampaignStorage storage;
+
/** All flight ids to import from the import file. */
- protected List<String> flightIds;
+ protected Iterable<String> flightIds;
- public File getImportFile() {
- return importFile;
+ public CampaignStorage getStorage() {
+ return storage;
}
- public List<String> getFlightIds() {
+ public Iterable<String> getFlightIds() {
return flightIds;
}
}
\ No newline at end of file
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -23,19 +23,45 @@
* #L%
*/
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.io.Files;
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.SammoaStorages;
+import fr.ulr.sammoa.persistence.SammoaDbMetas;
+import fr.ulr.sammoa.persistence.SammoaEntityEnum;
+import fr.ulr.sammoa.persistence.SammoaPersistenceHelper;
+import org.apache.commons.io.Charsets;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+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.in.ImportModelFactory;
+import org.nuiton.topia.persistence.csv.in.TopiaCsvImports;
+import org.nuiton.topia.persistence.metadata.AssociationMeta;
+import org.nuiton.topia.persistence.metadata.ColumnMeta;
+import org.nuiton.topia.persistence.metadata.DbMeta;
+import org.nuiton.topia.persistence.metadata.MetaFilenameAware;
+import org.nuiton.topia.persistence.metadata.TableMeta;
import org.nuiton.util.TimeLog;
import org.nuiton.util.ZipUtil;
+import org.nuiton.util.csv.Import;
+import org.nuiton.util.csv.ImportModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
+import java.io.Reader;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
/**
* Service to import sammoa files.
@@ -52,24 +78,6 @@
private static final TimeLog timeLog =
new TimeLog(ImportApplicationService.class);
- public void importApplication(ImportApplicationModel model) {
-
- if (logger.isInfoEnabled()) {
- logger.info("Start Application import to {} :: {}",
- model.getImportFile());
- }
-
- long startTime = TimeLog.getTime();
-
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- //BOUH!
- }
-
- timeLog.log(startTime, "importApplication", "after Callback execution");
- }
-
public CampaignStorage loadCampaignStorage(File file) {
File tmpDirectory = context.getConfig().getTmpDirectory();
File deflateDirectory = new File(tmpDirectory, file.getName() + "_" + System.nanoTime());
@@ -88,6 +96,198 @@
String campaignId = campaignDirectory.getName();
CampaignStorage storage = SammoaStorages.getCampaignStorage(
deflateDirectory, campaignId);
+
+ SammoaStorages.loadProperties(storage);
+
return storage;
}
+
+ public void importApplication(ImportApplicationModel model) {
+
+ CampaignStorage storage = model.getStorage();
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Start Application import to {} :: {}",
+ storage);
+ }
+
+ long startTime = TimeLog.getTime();
+
+ DbMeta<SammoaEntityEnum> dbMetas = persistence.getDbMetas();
+ SammoaPersistenceHelper persistenceHelper = persistence.getPersistenceHelper();
+ MetaFilenameAware<SammoaEntityEnum>[] referencialEntries = SammoaDbMetas.getReferencialEntries(dbMetas);
+
+ List<String> missingEntries = Lists.newArrayList();
+ Map<MetaFilenameAware<SammoaEntityEnum>, File> fileMap = TopiaCsvImports.discoverEntries(
+ referencialEntries,
+ storage.getCsvDirectory(),
+ missingEntries);
+
+ Preconditions.checkState(
+ missingEntries.isEmpty(),
+ "It miss some csv files for referential import :" +
+ missingEntries);
+
+ Map<SammoaEntityEnum, Map<String, TopiaEntity>> universe = Maps.newTreeMap();
+ SammoaImportModelFactory modelFactory = new SammoaImportModelFactory(universe);
+
+ TopiaContext tx = beginTransaction();
+
+ try {
+
+ for (MetaFilenameAware<SammoaEntityEnum> entry : referencialEntries) {
+
+ File entryFile = fileMap.get(entry);
+ TopiaDAO<? extends TopiaEntity> dao = persistenceHelper.getDAO(tx, entry.getSource().getContract());
+ importReferential(dao,
+ modelFactory,
+ entryFile,
+ (TableMeta<SammoaEntityEnum>) entry);
+ }
+
+ tx.commitTransaction();
+
+ startTime = timeLog.log(startTime, "importApplication", "after referential import");
+ } catch (TopiaException e) {
+ throw new SammoaTechnicalException("Could not import", e);
+ } catch (IOException e) {
+ throw new SammoaTechnicalException("Could not import", e);
+ } finally {
+ endTransaction(tx);
+ }
+
+ try {
+ storage.delete();
+ } catch (IOException e) {
+ throw new SammoaTechnicalException(
+ "Could not delete storage", e);
+ }
+
+ timeLog.log(startTime, "importApplication", "after Callback execution");
+ }
+
+ protected <E extends TopiaEntity> void importReferential(TopiaDAO<E> dao,
+ SammoaImportModelFactory modelFactory,
+ File entryFile,
+ TableMeta<SammoaEntityEnum> meta) throws IOException, TopiaException {
+
+ SammoaEntityEnum entityEnum = meta.getSource();
+
+ // create new universe
+ Map<String, TopiaEntity> universe = Maps.newTreeMap();
+ modelFactory.getUniverse().put(entityEnum, universe);
+
+ Reader reader = Files.newReader(entryFile, Charsets.UTF_8);
+ try {
+ long s0 = TimeLog.getTime();
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Will import " + meta);
+ }
+ ImportModel<TopiaEntity> model = modelFactory.buildForImport(meta);
+ Import<TopiaEntity> importer = Import.newImport(model, reader);
+ try {
+
+ for (TopiaEntity entity : importer) {
+
+ String topiaId = entity.getTopiaId();
+
+ Map<String, Object> properties = meta.prepareCreate(entity, null);
+ E existingEntity = dao.findByProperties(properties);
+ if (existingEntity == null) {
+
+ // new entity to create
+ E entityToSave = dao.create(properties);
+ String newTopiaId = entityToSave.getTopiaId();
+ Date topiaCreateDate = entityToSave.getTopiaCreateDate();
+ meta.copy(entity, entityToSave);
+ entityToSave.setTopiaId(newTopiaId);
+ entityToSave.setTopiaCreateDate(topiaCreateDate);
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Create entity [{} becomes {}] with naturalId {}", new Object[]{topiaId, newTopiaId, properties});
+ }
+ universe.put(topiaId, entityToSave);
+ } else {
+ // existing entity, nothing to create
+ // just add a ref into universe to make translation possible by foreign keys
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Existing entity [{}] with naturalId {}, do not create anything", topiaId, properties);
+ }
+
+ universe.put(topiaId, existingEntity);
+ }
+
+ }
+
+ } finally {
+ importer.close();
+ }
+
+ timeLog.log(s0, "importFile::done");
+
+ s0 = TimeLog.getTime();
+
+ persistence.flushTransaction(dao.getContext());
+
+ timeLog.log(s0, "importFile::flushTransaction");
+ } finally {
+ reader.close();
+ }
+ }
+
+ protected class SammoaImportModelFactory implements ImportModelFactory<SammoaEntityEnum> {
+
+ final Map<SammoaEntityEnum, Map<String, TopiaEntity>> universe;
+
+ private SammoaImportModelFactory(Map<SammoaEntityEnum, Map<String, TopiaEntity>> universe) {
+ this.universe = universe;
+ }
+
+ public Map<SammoaEntityEnum, Map<String, TopiaEntity>> getUniverse() {
+ return universe;
+ }
+
+ public <E extends TopiaEntity> Import<E> newModel(TableMeta<SammoaEntityEnum> meta, Reader reader) {
+ ImportModel<E> model = buildForImport(meta);
+ Import<E> importer = Import.newImport(model, reader);
+ return importer;
+ }
+
+ @Override
+ public <E extends TopiaEntity> ImportModel<E> buildForImport(TableMeta<SammoaEntityEnum> meta) {
+
+ EntityCsvModel<SammoaEntityEnum, E> model = EntityCsvModel.newModel(
+ config.getCsvSeparator(),
+ meta,
+ TopiaEntity.TOPIA_ID
+ );
+
+ for (ColumnMeta columnMeta : meta) {
+ String propertyName = columnMeta.getName();
+ Class<?> type = columnMeta.getType();
+ if (!columnMeta.isFK()) {
+ model.addDefaultColumn(propertyName, type);
+ } else {
+
+ Class<TopiaEntity> entityType = (Class<TopiaEntity>) type;
+ SammoaEntityEnum entityEnum = SammoaEntityEnum.valueOf(entityType);
+ Map<String, TopiaEntity> entitiesbyId = universe.get(entityEnum);
+ model.addForeignKeyForImport(propertyName, entityType, entitiesbyId);
+ }
+ }
+ return model;
+ }
+
+ @Override
+ public ImportModel<Map<String, Object>> buildForImport(AssociationMeta<SammoaEntityEnum> meta) {
+ return null;
+ }
+
+ @Override
+ public boolean isNMAssociationMeta(AssociationMeta<SammoaEntityEnum> meta) {
+ return false;
+ }
+ }
}
\ No newline at end of file
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -221,7 +221,7 @@
csvDirectory);
ExportEntityVisitor<SammoaEntityEnum> exportVisitor =
- ExportEntityVisitor.newVisitor(dbMetas.getEntityEnumProvider(),
+ ExportEntityVisitor.newVisitor(dbMetas.getPersistenceHelper(),
exportContexts);
FlightService flightService = getService(FlightService.class);
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-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaDbMetas.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -28,12 +28,12 @@
import org.nuiton.topia.persistence.metadata.DbMeta;
import org.nuiton.topia.persistence.metadata.MetaFilenameAware;
import org.nuiton.topia.persistence.metadata.Metadatas;
-import org.nuiton.topia.persistence.metadata.TopiaEntityEnumProvider;
import java.util.List;
+import java.util.Map;
/**
- * TODO
+ * Useful methods aroun meta datas of sammoa entities.
*
* @author tchemit <chemit(a)codelutin.com>
* @since 0.6
@@ -43,8 +43,8 @@
private static final SammoaEntityEnum[] EMPTY_ENTITY_TYPE_ARRAY =
new SammoaEntityEnum[0];
- public static DbMeta<SammoaEntityEnum> newDbMetas() {
- return DbMeta.newDbMeta(new SammoaTopiaEntityEnumProvider(),
+ public static DbMeta<SammoaEntityEnum> newDbMetas(SammoaPersistenceHelper persistenceHelper) {
+ return DbMeta.newDbMeta(persistenceHelper,
SammoaEntityEnum.values(),
EMPTY_ENTITY_TYPE_ARRAY
);
@@ -77,12 +77,12 @@
// with no dep
result.add(SammoaEntityEnum.Region);
+ result.add(SammoaEntityEnum.Species);
result.add(SammoaEntityEnum.Campaign);
- result.add(SammoaEntityEnum.Strate);
+ result.add(SammoaEntityEnum.Observer);
result.add(SammoaEntityEnum.Sector);
+ result.add(SammoaEntityEnum.Strate);
result.add(SammoaEntityEnum.Transect);
- result.add(SammoaEntityEnum.Observer);
- result.add(SammoaEntityEnum.Species);
return result.toArray(new SammoaEntityEnum[result.size()]);
}
@@ -108,6 +108,15 @@
return entities.toArray(new MetaFilenameAware[entities.size()]);
}
+ public static Map<SammoaEntityEnum, MetaFilenameAware<SammoaEntityEnum>> getReferencialEntriesByType(DbMeta<SammoaEntityEnum> dbMeta) {
+ List<MetaFilenameAware<SammoaEntityEnum>> entities = Lists.newArrayList();
+ List<MetaFilenameAware<SammoaEntityEnum>> associations = Lists.newArrayList();
+ entities.addAll(associations);
+ Metadatas.addEntries(dbMeta, entities, associations, getReferenceTypes());
+ return Metadatas.uniqueIndex(entities);
+ }
+
+
public static MetaFilenameAware<SammoaEntityEnum>[] getDataEntries(DbMeta<SammoaEntityEnum> dbMeta) {
List<MetaFilenameAware<SammoaEntityEnum>> entities = Lists.newArrayList();
@@ -124,17 +133,4 @@
return Metadatas.split(associations);
}
- /**
- * Implementation of {@link TopiaEntityEnumProvider} for Sammoa.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 0.6
- */
- public static class SammoaTopiaEntityEnumProvider implements TopiaEntityEnumProvider<SammoaEntityEnum> {
-
- @Override
- public <E> SammoaEntityEnum getEntityEnum(Class<E> type) {
- return SammoaEntityEnum.valueOf(type);
- }
- }
}
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-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistence.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -30,6 +30,7 @@
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.TopiaNotFoundException;
import org.nuiton.topia.TopiaRuntimeException;
+import org.nuiton.topia.framework.TopiaContextImplementor;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.metadata.DbMeta;
@@ -59,6 +60,8 @@
protected AutoSaveListener autoSaveListener;
+ protected SammoaPersistenceHelper persistenceHelper;
+
protected DbMeta<SammoaEntityEnum> dbMetas;
/**
@@ -191,9 +194,16 @@
}
}
+ public SammoaPersistenceHelper getPersistenceHelper() {
+ if (persistenceHelper == null) {
+ persistenceHelper = new SammoaPersistenceHelper();
+ }
+ return persistenceHelper;
+ }
+
public DbMeta<SammoaEntityEnum> getDbMetas() {
if (dbMetas == null) {
- dbMetas = SammoaDbMetas.newDbMetas();
+ dbMetas = SammoaDbMetas.newDbMetas(getPersistenceHelper());
}
return dbMetas;
}
@@ -228,4 +238,7 @@
}
}
+ public void flushTransaction(TopiaContext tx) throws TopiaException {
+ ((TopiaContextImplementor) tx).getHibernate().flush();
+ }
}
Added: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java (rev 0)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -0,0 +1,31 @@
+package fr.ulr.sammoa.persistence;
+
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.TopiaRuntimeException;
+import org.nuiton.topia.persistence.TopiaDAO;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.TopiaPersistenceHelper;
+
+/**
+ * Implementation of {@link TopiaPersistenceHelper} for Sammoa.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class SammoaPersistenceHelper implements TopiaPersistenceHelper<SammoaEntityEnum> {
+
+ @Override
+ public <E extends TopiaEntity> SammoaEntityEnum getEntityEnum(Class<E> type) {
+ return SammoaEntityEnum.valueOf(type);
+ }
+
+ @Override
+ public <E extends TopiaEntity> TopiaDAO<E> getDAO(TopiaContext tx, Class<E> type) {
+ try {
+ return SammoaDAOHelper.<E, TopiaDAO<E>>getDAO(tx, type);
+ } catch (TopiaException e) {
+ throw new TopiaRuntimeException(e);
+ }
+ }
+}
Property changes on: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/SammoaPersistenceHelper.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
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-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-persistence/src/test/java/fr/ulr/sammoa/persistence/SammoaDbMetasTest.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -43,7 +43,7 @@
@Before
public void setUp() throws Exception {
- dbMetas = SammoaDbMetas.newDbMetas();
+ dbMetas = SammoaDbMetas.newDbMetas(new SammoaPersistenceHelper());
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/StartApp.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/StartApp.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/StartApp.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -35,6 +35,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.swing.UIManager;
+import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.util.Locale;
@@ -89,6 +91,8 @@
}
}
+ UIManager.put("BlockingLayerUI.blockingColor", new Color(50,50,50));
+
MainUI mainUI = new MainUI(context);
mainUI.setVisible(true);
}
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightImportEntry.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightImportEntry.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightImportEntry.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -0,0 +1,71 @@
+package fr.ulr.sammoa.ui.swing.io.input.application;
+/*
+ * #%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.io.FlightStorage;
+import fr.ulr.sammoa.persistence.Flight;
+import org.jdesktop.beans.AbstractSerializableBean;
+
+/**
+ * Define a flight storage entry found in storage to import with his optional
+ * existing flight from db.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class FlightImportEntry extends AbstractSerializableBean {
+
+ private static final long serialVersionUID = 1L;
+
+ /** The storage of the flight loaded from the sammoa file. */
+ protected final FlightStorage flightStorage;
+
+ /** The optional existing flight loaded from db. */
+ protected final Flight existingFlight;
+
+ /** Flag to treat or not the incoming flight. */
+ protected boolean treat;
+
+ public FlightImportEntry(FlightStorage flightStorage,
+ Flight existingFlight) {
+ this.flightStorage = flightStorage;
+ this.existingFlight = existingFlight;
+ }
+
+ public FlightStorage getFlightStorage() {
+ return flightStorage;
+ }
+
+ public Flight getExistingFlight() {
+ return existingFlight;
+ }
+
+ public boolean isTreat() {
+ return treat;
+ }
+
+ public void setTreat(boolean treat) {
+ this.treat = treat;
+ }
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightImportEntry.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightTableModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightTableModel.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightTableModel.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -0,0 +1,99 @@
+package fr.ulr.sammoa.ui.swing.io.input.application;
+/*
+ * #%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 com.google.common.base.Preconditions;
+import jaxx.runtime.SwingUtil;
+
+import javax.swing.table.AbstractTableModel;
+import java.util.List;
+
+/**
+ * Table model with flight entries to import.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class FlightTableModel extends AbstractTableModel {
+
+ private static final long serialVersionUID = 1L;
+
+ protected final List<FlightImportEntry> data;
+
+ protected final boolean canSelect;
+
+ protected Class<?>[] COLUMN_TYPES = {String.class, Boolean.class};
+
+ public FlightTableModel(List<FlightImportEntry> data, boolean canSelect) {
+ Preconditions.checkNotNull(data);
+ this.data = data;
+ this.canSelect = canSelect;
+ }
+
+ @Override
+ public boolean isCellEditable(int rowIndex, int columnIndex) {
+ return canSelect && columnIndex == 1;
+ }
+
+ @Override
+ public Class<?> getColumnClass(int columnIndex) {
+ return COLUMN_TYPES[columnIndex];
+ }
+
+ @Override
+ public int getRowCount() {
+ return data.size();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return canSelect ? 2 : 1;
+ }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ SwingUtil.ensureRowIndex(this, rowIndex);
+ SwingUtil.ensureColumnIndex(this, columnIndex);
+ FlightImportEntry flightImportEntry = data.get(rowIndex);
+
+ Object result = null;
+ switch (columnIndex) {
+ case 0:
+ result = flightImportEntry.getFlightStorage().getName();
+ break;
+ case 1:
+ result = flightImportEntry.isTreat();
+ break;
+ }
+ return result;
+ }
+
+ @Override
+ public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+ SwingUtil.ensureRowIndex(this, rowIndex);
+ SwingUtil.ensureColumnIndex(this, columnIndex);
+ FlightImportEntry flightImportEntry = data.get(rowIndex);
+ flightImportEntry.setTreat(Boolean.valueOf(aValue.toString()));
+ }
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/FlightTableModel.java
___________________________________________________________________
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/application/ImportApplicationUI.css
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css 2012-08-21 16:12:32 UTC (rev 454)
@@ -39,4 +39,19 @@
#importButton {
text: "sammoa.action.importApplication";
+}
+
+#loadImportFileButton {
+ text: "sammoa.action.loadImportApplicationFile";
+ enabled:{model.isImportFileExist()}
+}
+
+#loadImportFileResultInfo {
+ actionIcon:"information";
+}
+
+#busyBlockLayerUI {
+ useIcon:false;
+ blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
+ block:{!model.isImportFileLoaded()};
}
\ No newline at end of file
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx 2012-08-21 16:12:32 UTC (rev 454)
@@ -30,8 +30,10 @@
fr.ulr.sammoa.ui.swing.SammoaUIContext
jaxx.runtime.swing.editor.FileEditor
+ jaxx.runtime.swing.BlockingLayerUI
java.awt.BorderLayout
+ javax.swing.UIManager
static org.nuiton.i18n.I18n._
</import>
@@ -56,6 +58,8 @@
<ImportApplicationUIHandler id='handler'
initializer='getContextValue(ImportApplicationUIHandler.class)'/>
+ <BlockingLayerUI id='busyBlockLayerUI'/>
+
<Table fill='both' constraints='BorderLayout.CENTER'>
<!-- import file -->
<row>
@@ -67,9 +71,37 @@
onActionPerformed='getModel().setImportFile(importFileEditor.getSelectedFile())'/>
</cell>
</row>
+ <!-- load import file -->
+ <row>
+ <cell fill='horizontal' weightx='1.0' columns='3'>
+ <JButton id='loadImportFileButton'
+ onActionPerformed='getHandler().loadStorage(model.getImportFile())'/>
+ </cell>
+ </row>
+ <!-- import file separator -->
+ <row>
+ <cell fill='horizontal' weightx='1.0' columns='3'>
+ <JSeparator id='importFileSeparator'/>
+ </cell>
+ </row>
+ <!-- load import file result -->
+ <row>
+ <cell fill='both' weightx='1.0' columns='3'>
+ <JPanel id='loadImportFileResultPanel' layout='{new BorderLayout()}'
+ decorator='boxed'>
+ <JLabel id='loadImportFileResultInfo'
+ constraints='BorderLayout.NORTH'/>
+ <JScrollPane id='loadImportFileResultFlightsPane'
+ constraints='BorderLayout.CENTER'>
+ <JTable id='loadImportFileResultFlightsTable'/>
+ </JScrollPane>
+ </JPanel>
+ </cell>
+ </row>
+
<!--import actions-->
<row>
- <cell columns='5' fill="both">
+ <cell columns='3' fill="both">
<JPanel layout='{new GridLayout(1,2,0,0)}'>
<JButton id='quitButton' onActionPerformed='getHandler().close()'/>
<JButton id='importButton'
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -23,25 +23,41 @@
* #L%
*/
+import com.google.common.collect.Lists;
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.FlightStorage;
import fr.ulr.sammoa.application.io.input.application.ImportApplicationModel;
import fr.ulr.sammoa.application.io.input.application.ImportApplicationService;
import fr.ulr.sammoa.persistence.Campaign;
+import fr.ulr.sammoa.persistence.Flight;
import fr.ulr.sammoa.ui.swing.SammoaScreen;
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import fr.ulr.sammoa.ui.swing.SammoaUIHandler;
import fr.ulr.sammoa.ui.swing.UIDecoratorService;
import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
+import jaxx.runtime.SwingUtil;
+import jaxx.runtime.swing.editor.FileEditor;
+import org.nuiton.util.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
+import java.util.List;
+import java.util.Map;
+import static org.nuiton.i18n.I18n._;
+import static org.nuiton.i18n.I18n.n_;
+
/**
* UI Handler fo {@link ImportApplicationUI}.
*
@@ -90,9 +106,13 @@
@Override
public void propertyChange(PropertyChangeEvent evt) {
- if (ImportApplicationUIModel.PROPERTY_STORAGE.equals(evt.getPropertyName())) {
+ String propertyName = evt.getPropertyName();
+ if (ImportApplicationUIModel.PROPERTY_STORAGE.equals(propertyName)) {
CampaignStorage newValue = (CampaignStorage) evt.getNewValue();
onCampaignStorageChanged(newValue);
+ } else if (ImportApplicationUIModel.PROPERTY_IMPORT_FILE_LOADED.equals(propertyName)) {
+ boolean newValue = (Boolean) evt.getNewValue();
+ onImportFileLoaded(newValue);
}
// else if (ImportApplicationUIModel.PROPERTY_FLIGHTS.equals(evt.getPropertyName())) {
// Collection<Flight> newValue = (Collection<Flight>) evt.getNewValue();
@@ -107,6 +127,26 @@
@Override
public void afterInitUI() {
+
+ // Boolean editor/renderer on table
+ {
+ JTable table = ui.getLoadImportFileResultFlightsTable();
+ TableCellEditor editor = table.getDefaultEditor(Boolean.class);
+ table.setDefaultEditor(boolean.class, editor);
+ TableCellRenderer renderer = table.getDefaultRenderer(Boolean.class);
+ table.setDefaultRenderer(boolean.class, renderer);
+ }
+
+ SwingUtil.setLayerUI(ui.getLoadImportFileResultPanel(),
+ ui.getBusyBlockLayerUI());
+
+ FileEditor importFileEditor = ui.getImportFileEditor();
+ String absolutePath = FileUtil.getCurrentDirectory().getAbsolutePath();
+ if (absolutePath.endsWith(File.separator + ".")) {
+ absolutePath = absolutePath.substring(0, absolutePath.length() - 2);
+ }
+ importFileEditor.setStartPath(absolutePath);
+ onImportFileLoaded(false);
}
@Override
@@ -128,11 +168,12 @@
public void importApplication() {
+ // get service model
+ ImportApplicationModel dataModel = getModel().toModel();
+
JFrame frame = ui.getParentContainer(JFrame.class);
SammoaUtil.updateBusyState(frame, true);
-
try {
- ImportApplicationModel dataModel = getModel().toModel();
importService.importApplication(dataModel);
} finally {
@@ -149,24 +190,111 @@
}
protected void onCampaignStorageChanged(CampaignStorage storage) {
- String campaignId = storage.getId();
- if (logger.isInfoEnabled()) {
- logger.info("Will load campaing {}", campaignId);
- }
- Campaign campaign = referentialService.getCampaign(campaignId);
ImportApplicationUIModel model = getModel();
+ List<FlightImportEntry> flightImportEntryList;
+ Campaign campaign;
+ if (storage == null) {
- if (campaign == null) {
+ // willReset model
+ flightImportEntryList = null;
+ campaign = null;
- // new campaign
- model.setNewCampaign(campaign);
} else {
- // existing campaign
- model.setExistingCampaign(campaign);
+ Map<String, Object> naturalId = storage.getNaturalId();
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Discover campaing {}", naturalId);
+ }
+
+ campaign = referentialService.getCampaignByNaturalId(naturalId);
+
+ boolean existingCampaign = campaign != null;
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Is campaign exist ? {}", existingCampaign);
+ }
+
+ flightImportEntryList = Lists.newArrayList();
+
+ for (FlightStorage flightStorage : storage) {
+
+ Map<String, Object> flightNaturalId = flightStorage.getNaturalId();
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Discover flight {}", flightNaturalId);
+ }
+ Flight flight = null;
+
+ if (existingCampaign) {
+
+ // try to find existing fligth from his natural id
+ flight = flightService.getFlightByNaturalId(flightNaturalId);
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Is flight exist ? {}", flight != null);
+ }
+ }
+
+ flightImportEntryList.add(
+ new FlightImportEntry(flightStorage, flight));
+ }
}
+
+ model.setCampaignExist(campaign != null);
+ model.setFlightEntries(flightImportEntryList);
}
+ protected void onImportFileLoaded(boolean newValue) {
+
+ JTable table = ui.getLoadImportFileResultFlightsTable();
+ JLabel label = ui.getLoadImportFileResultInfo();
+
+ String infoLabel;
+ if (newValue) {
+
+ // import file was loaded, let's add
+
+ ImportApplicationUIModel model = getModel();
+
+ String name = model.getStorage().getName();
+
+ boolean existingCampaign = model.isCampaignExist();
+
+ if (existingCampaign) {
+
+ table.setModel(new FlightTableModel(model.getFlightEntries(), true));
+
+ infoLabel =
+ _("sammoa.info.importApplication.importfile.loaded.on.existingCampaign", name);
+
+ SwingUtil.setI18nTableHeaderRenderer(
+ table,
+ n_("sammoa.importApplication.flightTable.column.flightName"),
+ n_("sammoa.importApplication.flightTable.column.flightName.tip"),
+ n_("sammoa.importApplication.flightTable.column.toTreat"),
+ n_("sammoa.importApplication.flightTable.column.toTreat.tip"));
+ } else {
+
+ table.setModel(new FlightTableModel(model.getFlightEntries(), false));
+ infoLabel = _("sammoa.info.importApplication.importfile.loaded.on.newCampaign", name);
+ SwingUtil.setI18nTableHeaderRenderer(
+ table,
+ n_("sammoa.importApplication.flightTable.column.flightName"),
+ n_("sammoa.importApplication.flightTable.column.flightName.tip"));
+ }
+
+ } else {
+
+ // nothing is loaded, just remove table model and change label
+
+ table.setModel(new DefaultTableModel());
+ infoLabel = _("sammoa.info.importApplication.no.importfile.loaded");
+ }
+
+ label.setText(infoLabel);
+ }
+
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -26,8 +26,6 @@
import com.google.common.collect.Lists;
import fr.ulr.sammoa.application.io.CampaignStorage;
import fr.ulr.sammoa.application.io.input.application.ImportApplicationModel;
-import fr.ulr.sammoa.persistence.Campaign;
-import fr.ulr.sammoa.persistence.Flight;
import org.jdesktop.beans.AbstractSerializableBean;
import java.io.File;
@@ -43,18 +41,14 @@
private static final long serialVersionUID = 1L;
- public static final String PROPERTY_EXISTING_CAMPAIGN = "existingCampaign";
+ public static final String PROPERTY_IMPORT_FILE = "importFile";
- public static final String PROPERTY_EXISTING_FLIGHTS = "existingFlights";
+ public static final String PROPERTY_CAMPAIGN_EXIST = "campaignExist";
- public static final String PROPERTY_NEW_CAMPAIGN = "newCampaign";
+ public static final String PROPERTY_IMPORT_FILE_EXIST = "importFileExist";
- public static final String PROPERTY_NEW_FLIGHTS = "newFlights";
+ public static final String PROPERTY_IMPORT_FILE_LOADED = "importFileLoaded";
- public static final String PROPERTY_SELECTED_FLIGHT_IDS = "selectedFlightIds";
-
- public static final String PROPERTY_IMPORT_FILE = "importFile";
-
public static final String PROPERTY_STORAGE = "storage";
/** File to import. */
@@ -63,21 +57,11 @@
/** Loaded campaign storage. */
protected CampaignStorage storage;
- /** Existing campaign. */
- protected Campaign existingCampaign;
+ /** Is campaign exists ? */
+ protected boolean campaignExist;
- /** existing existingFlights on db. */
- protected List<Flight> existingFlights;
+ protected List<FlightImportEntry> flightEntries;
- /** New campaign to import (read from the import file). */
- protected Campaign newCampaign;
-
- /** New existingFlights to import (read from the import file). */
- protected List<Flight> newFlights;
-
- /** Selected flight ids to imports. */
- protected List<String> selectedFlightIds;
-
public File getImportFile() {
return importFile;
}
@@ -86,8 +70,18 @@
File oldValue = this.importFile;
this.importFile = importFile;
firePropertyChange(PROPERTY_IMPORT_FILE, oldValue, importFile);
+ firePropertyChange(PROPERTY_IMPORT_FILE_EXIST, false, isImportFileExist());
+ firePropertyChange(PROPERTY_IMPORT_FILE_LOADED, false, isImportFileLoaded());
}
+ public boolean isImportFileExist() {
+ return importFile != null && importFile.isFile() && importFile.exists();
+ }
+
+ public boolean isImportFileLoaded() {
+ return isImportFileExist() && flightEntries != null;
+ }
+
public CampaignStorage getStorage() {
return storage;
}
@@ -96,66 +90,46 @@
CampaignStorage oldValue = this.storage;
this.storage = storage;
firePropertyChange(PROPERTY_STORAGE, oldValue, storage);
+ firePropertyChange(PROPERTY_IMPORT_FILE_LOADED, false, isImportFileLoaded());
}
- public Campaign getExistingCampaign() {
- return existingCampaign;
+ public boolean isCampaignExist() {
+ return campaignExist;
}
- public void setExistingCampaign(Campaign existingCampaign) {
- Campaign oldValue = this.existingCampaign;
- this.existingCampaign = existingCampaign;
- firePropertyChange(PROPERTY_EXISTING_CAMPAIGN, oldValue, existingCampaign);
+ public void setCampaignExist(boolean campaignExist) {
+ boolean oldValue = this.campaignExist;
+ this.campaignExist = campaignExist;
+ firePropertyChange(PROPERTY_CAMPAIGN_EXIST, oldValue, campaignExist);
}
- public List<Flight> getExistingFlights() {
- if (existingFlights == null) {
- existingFlights = Lists.newArrayList();
- }
- return existingFlights;
+ public List<FlightImportEntry> getFlightEntries() {
+ return flightEntries;
}
- public void setExistingFlights(List<Flight> existingFlights) {
- List<Flight> oldValue = this.existingFlights;
- this.existingFlights = existingFlights;
- firePropertyChange(PROPERTY_EXISTING_FLIGHTS, oldValue, existingFlights);
+ public void setFlightEntries(List<FlightImportEntry> flightEntries) {
+ this.flightEntries = flightEntries;
+ firePropertyChange(PROPERTY_IMPORT_FILE_EXIST, false, isImportFileLoaded());
}
- public List<Flight> getNewFlights() {
- return newFlights;
- }
+ public ImportApplicationModel toModel() {
- public void setNewFlights(List<Flight> newFlights) {
- List<Flight> oldValue = this.newFlights;
- this.newFlights = newFlights;
- firePropertyChange(PROPERTY_NEW_FLIGHTS, oldValue, newFlights);
- }
+ List<String> flightIds = Lists.newArrayList();
- public Campaign getNewCampaign() {
- return newCampaign;
- }
+ for (FlightImportEntry entry : getFlightEntries()) {
+ if (!campaignExist || entry.isTreat()) {
- public void setNewCampaign(Campaign newCampaign) {
- Campaign oldValue = this.newCampaign;
- this.newCampaign = newCampaign;
- firePropertyChange(PROPERTY_NEW_CAMPAIGN, oldValue, newCampaign);
- }
+ //flight to import
+ flightIds.add(entry.getFlightStorage().getId());
+ }
+ }
- public List<String> getSelectedFlightIds() {
- return selectedFlightIds;
- }
-
- public void setSelectedFlightIds(List<String> selectedFlightIds) {
- List<String> oldValue = this.selectedFlightIds;
- this.selectedFlightIds = selectedFlightIds;
- firePropertyChange(PROPERTY_SELECTED_FLIGHT_IDS, oldValue, selectedFlightIds);
- }
-
- public ImportApplicationModel toModel() {
ImportApplicationModel result = ImportApplicationModel.newModel(
- getImportFile(),
- getSelectedFlightIds()
+ getStorage(),
+ flightIds
);
return result;
}
+
+
}
\ No newline at end of file
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -4,3 +4,26 @@
* @since 0.6
*/
package fr.ulr.sammoa.ui.swing.io.input.application;
+/*
+ * #%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/application/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/application/java-info.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -4,3 +4,26 @@
* @since 0.6
*/
package fr.ulr.sammoa.ui.swing.io.output.application;
+/*
+ * #%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/application/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/util/ButtonActionTableCellEditorRenderer.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java 2012-08-21 16:12:32 UTC (rev 454)
@@ -1,4 +1,27 @@
package fr.ulr.sammoa.ui.swing.util;
+/*
+ * #%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 com.google.common.base.Predicate;
import com.google.common.base.Supplier;
Modified: trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties
===================================================================
--- trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-21 16:11:32 UTC (rev 453)
+++ trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-21 16:12:32 UTC (rev 454)
@@ -24,6 +24,7 @@
sammoa.action.home.tip=Home
sammoa.action.importApplication=Import
sammoa.action.left.tip=LEFT \: create a new Observation for the observer on the left side
+sammoa.action.loadImportApplicationFile=Load selected import file
sammoa.action.new=New
sammoa.action.next.tip=NEXT \: end previous effort and create a new LEG route for the next selected Transect
sammoa.action.nextTransect.tip=NEXT TRANSECT \: choose this transect to be the next one
@@ -75,6 +76,13 @@
sammoa.flightPanel.table.column.position.left=Left
sammoa.flightPanel.table.column.position.navigator=Nav
sammoa.flightPanel.table.column.position.right=Right
+sammoa.importApplication.flightTable.column.flightName=
+sammoa.importApplication.flightTable.column.flightName.tip=
+sammoa.importApplication.flightTable.column.toTreat=
+sammoa.importApplication.flightTable.column.toTreat.tip=
+sammoa.info.importApplication.importfile.loaded.on.existingCampaign=Import an existing campaign %s, please choose which flights of the following list to import
+sammoa.info.importApplication.importfile.loaded.on.newCampaign=Import a new campaign %s, all the flights of the following list will be imported
+sammoa.info.importApplication.no.importfile.loaded=No import file loaded, choose an file to import then press the 'load import file' button
sammoa.label.campaign=Campaign\:
sammoa.label.campaign.beginDate=Begin\:
sammoa.label.campaign.code=Code\:
Added: trunk/sammoa-ui-swing/src/main/resources/icons/action-information.png
===================================================================
(Binary files differ)
Property changes on: trunk/sammoa-ui-swing/src/main/resources/icons/action-information.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Added: svn:keywords
+ Author Date Id Revision HeadURL
1
0
r453 - trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing
by tchemit@users.forge.codelutin.com 21 Aug '12
by tchemit@users.forge.codelutin.com 21 Aug '12
21 Aug '12
Author: tchemit
Date: 2012-08-21 18:11:32 +0200 (Tue, 21 Aug 2012)
New Revision: 453
Url: http://forge.codelutin.com/repositories/revision/sammoa/453
Log:
deprecate some code
Modified:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java 2012-08-21 16:10:41 UTC (rev 452)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java 2012-08-21 16:11:32 UTC (rev 453)
@@ -23,13 +23,16 @@
* #L%
*/
+import javax.swing.UIManager;
import java.awt.Color;
/**
* Created: 16/07/12
*
* @author fdesbois <desbois(a)codelutin.com>
+ * @deprecated since 0.6, should use {@link UIManager} instead.
*/
+@Deprecated
public final class SammoaColors {
private SammoaColors() {
1
0
Author: tchemit
Date: 2012-08-21 18:10:41 +0200 (Tue, 21 Aug 2012)
New Revision: 452
Url: http://forge.codelutin.com/repositories/revision/sammoa/452
Log:
fix import doc (set order of import of entities)
Modified:
trunk/src/site/rst/import-export.rst
Modified: trunk/src/site/rst/import-export.rst
===================================================================
--- trunk/src/site/rst/import-export.rst 2012-08-20 16:13:19 UTC (rev 451)
+++ trunk/src/site/rst/import-export.rst 2012-08-21 16:10:41 UTC (rev 452)
@@ -718,16 +718,13 @@
Les propriétés suffixés d'un ^ correspondent à des clés étrangères en base.
- Region : code
+- Species : code, region^ (*)
+- Campaign : code, region^
+- Observer : initials, campaign^ (**)
- Sector : sectorNumber, campaign^
- Strate : strateType, sector^
- Transect : name, strate^
-- Species : code, region^
-
- * Pas d'espèce commune entre deux régions ou sinon une copie sera effectuée
-
-- Observer : initials, campaign^
-
- * Pas d'observateur commun entre deux campagnes ou sinon une copie sera effectuée
-
-- Campaign : code, region^
- Flight : systemId, flightNumber, campaign^
+
+* Pas d'espèce commune entre deux régions ou sinon une copie sera effectuée
+** Pas d'observateur commun entre deux campagnes ou sinon une copie sera effectuée
\ No newline at end of file
1
0
r451 - in trunk: sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util
by fdesbois@users.forge.codelutin.com 20 Aug '12
by fdesbois@users.forge.codelutin.com 20 Aug '12
20 Aug '12
Author: fdesbois
Date: 2012-08-20 18:13:19 +0200 (Mon, 20 Aug 2012)
New Revision: 451
Url: http://forge.codelutin.com/repositories/revision/sammoa/451
Log:
refs #1204 : remove TransectTable and move behavior in FlightUIHandler
Added:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java
Removed:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectBooleanTableCell.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTable.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableHandler.java
Modified:
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationDAOImpl.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.jaxx
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/TransectFlightModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationDAOImpl.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationDAOImpl.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/ObservationDAOImpl.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -81,11 +81,7 @@
public List<E> findAllByFlightOrderedByObservationTime(Flight flight) {
- String ql = String.format("FROM %1$s WHERE %2$s = :flight ORDER BY %3$s",
- ObservationImpl.class.getSimpleName(),
- Observation.PROPERTY_FLIGHT,
- Observation.PROPERTY_OBSERVATION_TIME
- );
+ String ql = "FROM ObservationImpl WHERE flight = :flight ORDER BY observationTime";
try {
List<E> result = findAllByQuery(ql, "flight", flight);
@@ -97,11 +93,7 @@
public int findLastObservationNumber(Flight flight) {
- String ql = String.format("SELECT max(%1$s) FROM %2$s WHERE %3$s = :flight",
- Observation.PROPERTY_OBSERVATION_NUMBER,
- ObservationImpl.class.getSimpleName(),
- Observation.PROPERTY_FLIGHT
- );
+ String ql = "SELECT max(observationNumber) FROM ObservationImpl WHERE flight = :flight";
try {
Integer queryResult = findByQuery(Integer.class, ql, "flight", flight);
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/NextTransectAction.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -23,12 +23,11 @@
*/
package fr.ulr.sammoa.ui.swing.action;
-import fr.ulr.sammoa.persistence.TransectFlight;
+import fr.ulr.sammoa.ui.swing.flight.TransectFlightModel;
import jaxx.runtime.JAXXContext;
import org.nuiton.util.Resource;
-import javax.swing.Action;
-import javax.swing.JComponent;
+import javax.swing.*;
import java.awt.event.ActionEvent;
import static org.nuiton.i18n.I18n._;
@@ -42,7 +41,7 @@
private static final long serialVersionUID = 1L;
- public static final String CLIENT_PROPERTY_INDEX = "index";
+ public static final String CLIENT_PROPERTY_TRANSECT_FLIGHT = "transectFlight";
public NextTransectAction(JAXXContext context) {
super(Resource.getIcon("/icons/action-next-transect.png"), context);
@@ -52,15 +51,13 @@
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
- if (source instanceof JComponent) {
+ TransectFlightModel transectFlight = null;
+ if (source instanceof JComponent) {
JComponent component = (JComponent) e.getSource();
- Integer index = (Integer) component.getClientProperty(CLIENT_PROPERTY_INDEX);
+ transectFlight = (TransectFlightModel) component.getClientProperty(CLIENT_PROPERTY_TRANSECT_FLIGHT);
- if (index != null) {
- TransectFlight transectFlight = getFlight().getTransectFlight().get(index);
- getFlightController().setNextTransect(transectFlight);
- }
+ getFlightController().setNextTransect(transectFlight.getSource());
}
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.css
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.css 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.css 2012-08-20 16:13:19 UTC (rev 451)
@@ -142,6 +142,7 @@
}
#transectTable {
+ model:{transectTableModel};
selectionModel:{transectFlightSelectionModel};
}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.jaxx
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.jaxx 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUI.jaxx 2012-08-20 16:13:19 UTC (rev 451)
@@ -31,6 +31,8 @@
javax.swing.ListSelectionModel
javax.swing.DefaultListSelectionModel
+ org.jdesktop.swingx.JXTable
+
com.bbn.openmap.gui.OverlayMapPanel
fr.ulr.sammoa.persistence.Flight
@@ -174,8 +176,7 @@
</Table>
<JScrollPane>
- <TransectTable id='transectTable'
- constructorParams='transectTableModel'/>
+ <JXTable id='transectTable'/>
</JScrollPane>
</JSplitPane>
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-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -42,7 +42,9 @@
import com.bbn.openmap.util.PropUtils;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
import com.google.common.base.Strings;
+import com.google.common.base.Supplier;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -95,27 +97,20 @@
import fr.ulr.sammoa.ui.swing.flight.layer.SimpleGeoPointLayer;
import fr.ulr.sammoa.ui.swing.flight.layer.TransectLayer;
import fr.ulr.sammoa.ui.swing.transect.TransectUI;
+import fr.ulr.sammoa.ui.swing.util.ButtonActionTableCellEditorRenderer;
import fr.ulr.sammoa.ui.swing.util.ColorTableCellRenderer;
import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
import jaxx.runtime.JAXXObject;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.swing.JAXXWidgetUtil;
import jaxx.runtime.swing.editor.cell.NumberCellEditor;
+import org.jdesktop.swingx.JXTable;
import org.nuiton.util.ApplicationConfig;
import org.nuiton.util.TimeLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.AbstractButton;
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComponent;
-import javax.swing.KeyStroke;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListSelectionModel;
+import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
@@ -123,6 +118,7 @@
import java.awt.event.ComponentListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
+import java.beans.IndexedPropertyChangeEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
@@ -357,113 +353,137 @@
timeLog.log(uiStartTime, "initUI");
+ long startTime = TimeLog.getTime();
+
+ // Strate ComboBox
+ {
+ JComboBox comboBox = ui.getStrateCombobox();
+
+ comboBox.setRenderer(decoratorService.newListCellRender(StrateModel.class));
+
+ StrateModel strateAll = getModel().getStrateAll();
+ SwingUtil.fillComboBox(comboBox, getModel().getStrates(), strateAll);
+
+ selectStrate(strateAll);
+ }
+
ListCellRenderer observerListCellRenderer =
decoratorService.newListCellRender(Observer.class);
+ // Observer List
{
- // init transect table
+ ui.getObserverSelector().setRenderer(
+ new ObserverListCellRenderer(observerListCellRenderer)
+ );
+ }
- TransectTable transectTable = ui.getTransectTable();
+ // Transect List
+ {
+ ui.getTransectList().setCellRenderer(
+ new TransectListCellRenderer(decoratorService.newListCellRender((TransectModel.class))));
+ }
- TransectTableModel transectTableModel = ui.getTransectTableModel();
+ // Transect Table
+ {
+ JXTable table = ui.getTransectTable();
- // for boolean
- TableCellRenderer booleanCellRenderer = transectTable.getDefaultRenderer(Boolean.class);
- TransectBooleanTableCell booleanTableCell = new TransectBooleanTableCell(booleanCellRenderer, transectTable.getActionButtons());
- transectTable.setDefaultRenderer(Boolean.class, booleanTableCell);
+ TransectTableModel tableModel = ui.getTransectTableModel();
- transectTable.setDefaultEditor(
- Observer.class,
- new ObserverTableCellEditor(transectTableModel.getReference(),
- observerListCellRenderer));
+ NumberCellEditor<Integer> numberCellEditor = JAXXWidgetUtil.newNumberTableCellEditor(Integer.class, false);
+ table.setDefaultEditor(Integer.class, numberCellEditor);
+ table.setDefaultEditor(int.class, numberCellEditor);
- transectTable.setDefaultRenderer(Observer.class,
- decoratorService.newTableCellRender(Observer.class));
+ TableCellRenderer stringRenderer = table.getDefaultRenderer(String.class);
- // Set specific renderer for NbTimes column
- TableCellRenderer defaultRenderer = transectTable.getDefaultRenderer(String.class);
- TransectCrossingNumberCellRenderer cellRenderer = new TransectCrossingNumberCellRenderer(defaultRenderer, transectTableModel);
- transectTable.getColumnModel().getColumn(TransectTableModel.TransectColumn.CROSSING_NUMBER.ordinal()).setCellRenderer(cellRenderer);
+ // OBSERVER columns (Left, Right, Nav, Co-Nav positions)
+ {
+ table.setDefaultEditor(
+ Observer.class,
+ new ObserverTableCellEditor(tableModel.getReference(), observerListCellRenderer)
+ );
- transectTable.setDefaultEditor(Boolean.class, booleanTableCell);
+ table.setDefaultRenderer(Observer.class,
+ decoratorService.newTableCellRender(Observer.class));
+ }
- NumberCellEditor<Integer> numberCellEditor = JAXXWidgetUtil.newNumberTableCellEditor(Integer.class, false);
- transectTable.setDefaultEditor(Integer.class, numberCellEditor);
- transectTable.setDefaultEditor(int.class, numberCellEditor);
+ // CROSSING_NUMBER column
+ {
+ TableColumn column = table.getColumn(TransectTableModel.TransectColumn.CROSSING_NUMBER.ordinal());
- // Position left column
+ TransectCrossingNumberCellRenderer cellRenderer =
+ new TransectCrossingNumberCellRenderer(stringRenderer, tableModel);
+
+ column.setCellRenderer(cellRenderer);
+ }
+
+ // LEFT position column
{
- TableColumn column = transectTable.getColumn(TransectTableModel.TransectColumn.POSITION_LEFT.ordinal());
- column.setHeaderRenderer(new ColorTableCellRenderer(defaultRenderer, SammoaColors.POSITION_LEFT_COLOR));
+ TableColumn column = table.getColumn(TransectTableModel.TransectColumn.POSITION_LEFT.ordinal());
+ column.setHeaderRenderer(new ColorTableCellRenderer(stringRenderer, SammoaColors.POSITION_LEFT_COLOR));
}
- // Position right column
+ // RIGHT position column
{
- TableColumn column = transectTable.getColumn(TransectTableModel.TransectColumn.POSITION_RIGHT.ordinal());
- column.setHeaderRenderer(new ColorTableCellRenderer(defaultRenderer, SammoaColors.POSITION_RIGHT_COLOR));
+ TableColumn column = table.getColumn(TransectTableModel.TransectColumn.POSITION_RIGHT.ordinal());
+ column.setHeaderRenderer(new ColorTableCellRenderer(stringRenderer, SammoaColors.POSITION_RIGHT_COLOR));
}
- transectTable.addHighlighter(
+ // ACTION column (Next Transect)
+ {
+ int columnIndex = TransectTableModel.TransectColumn.ACTION.ordinal();
+ TableColumn column = table.getColumnModel().getColumn(columnIndex);
+ ButtonActionTableCellEditorRenderer editorRenderer = new ButtonActionTableCellEditorRenderer(
+ NextTransectAction.CLIENT_PROPERTY_TRANSECT_FLIGHT,
+ new Supplier<Action>() {
+
+ @Override
+ public Action get() {
+ Action result = getActionMap().get("nextTransect");
+ return result;
+ }
+ },
+ new Predicate<Object>() {
+
+ @Override
+ public boolean apply(Object input) {
+ return !((TransectFlightModel) input).isDeleted();
+ }
+ });
+
+ column.setCellEditor(editorRenderer);
+ column.setCellRenderer(editorRenderer);
+ }
+
+ table.addHighlighter(
SammoaUtil.newColorHighlighter(
- new CurrentTransectHighlightPredicate(transectTableModel),
+ new CurrentTransectHighlightPredicate(tableModel),
SammoaColors.CURRENT_TRANSECT_ROW_COLOR)
);
- transectTable.addHighlighter(
+ table.addHighlighter(
SammoaUtil.newColorHighlighter(
- new NextTransectHighlightPredicate(transectTableModel),
+ new NextTransectHighlightPredicate(tableModel),
SammoaColors.NEXT_TRANSECT_ROW_COLOR)
);
- transectTable.setSortable(false);
+ table.setSortable(false);
}
- ui.getStrateCombobox().setRenderer(
- decoratorService.newListCellRender(StrateModel.class));
- ui.getObserverSelector().setRenderer(
- new ObserverListCellRenderer(observerListCellRenderer)
- );
- ui.getTransectList().setCellRenderer(
- new TransectListCellRenderer(decoratorService.newListCellRender((TransectModel.class))));
+ startTime = timeLog.log(startTime, "afterInitUI", "decoration done (editor/renderer)");
- long startTime = TimeLog.getTime();
-
- // Init the actions
initActions();
startTime = timeLog.log(startTime, "afterInitUI", "actions are created");
- // Add binding for Flight observers to update comboboxes references
- // based on flightObserverForPositions
getModel().getFlight().addPropertyChangeListener(
- Flight.PROPERTY_OBSERVER, new PropertyChangeListener() {
+ Flight.PROPERTY_OBSERVER, flightObserversListener);
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- Flight flight = (Flight) evt.getSource();
- List<Observer> observers = flightService.getFlightObserverForPositions(flight);
- getModel().setFlightObserverForPositions(observers);
- }
- });
+ getModel().addPropertyChangeListener(
+ FlightUIModel.PROPERTY_CURRENT_ROUTE, currentRouteListener);
- // Strate ComboBox
- StrateModel strateAll = getModel().getStrateAll();
- SwingUtil.fillComboBox(ui.getStrateCombobox(), getModel().getStrates(), strateAll);
- selectStrate(strateAll);
+ getModel().addPropertyChangeListener(
+ FlightUIModel.PROPERTY_NEXT_TRANSECT, nextTransectListener);
-// // Update current Transect depends on current Route
-// getModel().addPropertyChangeListener(
-// FlightUIModel.PROPERTY_CURRENT_ROUTE, new PropertyChangeListener() {
-//
-// @Override
-// public void propertyChange(PropertyChangeEvent evt) {
-//
-// setCurrentTransect((Route) evt.getOldValue(), false);
-//
-// setCurrentTransect((Route) evt.getNewValue(), true);
-// }
-// });
-
transectUi = new TransectUI(context);
transectUi.addComponentListener(transectUIListener);
@@ -500,10 +520,11 @@
@Override
public void onRouteAdded(Route route) {
+ getModel().setCurrentRoute(route);
+
if (route != null) {
getModel().addRoute(route);
}
- getModel().setCurrentRoute(route);
}
@Override
@@ -591,38 +612,9 @@
// Add elements to the flight
if (!Iterables.isEmpty(transects)) {
-// Flight flight = getModel().getFlight();
-//
-// // Ensure transect instances for all existing transectFlight
-// // FIXME-fdesbois-2012-07-18 : to avoid this manual binding we
-// // need to load all entities at startup in the same topiaContext
-// // for the moment, it's not possible because of the transect management,
-// // but it should be after cleaning import transect
-// for (TransectFlight transectFlight : flight.getTransectFlight()) {
-// Transect transect = transectFlight.getTransect();
-//
-// for (Transect newTransect : transects) {
-//
-// // Check if it's equal but not the same instance
-// if (transect.equals(newTransect) && transect != newTransect) {
-//
-// // Update the transect instance
-// transectFlight.setTransect(newTransect);
-//
-// // Fire the table for change
-// int rowIndex = ui.getTransectTableModel().getRowIndex(transectFlight);
-// ui.getTransectTableModel().fireTableRowsUpdated(rowIndex, rowIndex);
-//
-// if (logger.isDebugEnabled()) {
-// logger.debug(String.format("Transect instance %s change for previous TransectFlight %d", transect.getName(), rowIndex));
-// }
-// }
-// }
-// }
-
// Retrieve the last selected row from the table
- TransectTable table = ui.getTransectTable();
- int fromIndex = table.getLastSelectedRow();
+ JTable table = ui.getTransectTable();
+ int fromIndex = SammoaUtil.getLastSelectedRow(table);
if (fromIndex == -1) {
// Add after the last row
fromIndex = table.getRowCount();
@@ -647,17 +639,6 @@
int toIndex = fromIndex + newTransectFlights.size() - 1;
ui.getTransectTableModel().fireTableRowsInserted(fromIndex, toIndex);
-
-
-// // Retrieve real nbTimes for each new transect
-// Map<Transect, Long> transectRealNbTimes =
-// flightService.getTransectRealNbTimes(Lists.newArrayList(transects));
-// getModel().putAllTransectRealNbTimes(transectRealNbTimes);
-
- // Display the transects if flight is started
-// if (getFlightController().isRunning()) {
-// showOnlyFlightTransects(listModel.getSelectedReferences());
-// }
}
}
@@ -716,10 +697,10 @@
getModel().setActionMap(getActionMap());
initActions(getActionMap(), ui, getInputMap());
- List<JButton> actionButtons = ui.getTransectTable().getActionButtons();
- for (JButton actionButton : actionButtons) {
- initAction(getActionMap(), actionButton, getInputMap());
- }
+// List<JButton> actionButtons = ui.getTransectTable().getActionButtons();
+// for (JButton actionButton : actionButtons) {
+// initAction(getActionMap(), actionButton, getInputMap());
+// }
}
protected void putAction(String actionName, Action action) {
@@ -922,6 +903,54 @@
}
}
+ protected PropertyChangeListener flightObserversListener = new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+
+ // Add binding for Flight observers to update comboboxes references
+ // based on flightObserverForPositions
+ Flight flight = (Flight) evt.getSource();
+ List<Observer> observers = flightService.getFlightObserverForPositions(flight);
+ getModel().setFlightObserverForPositions(observers);
+
+ // Refresh all the table if some observer is removed (index = old collection size)
+ if (evt instanceof IndexedPropertyChangeEvent) {
+ int oldSize = ((IndexedPropertyChangeEvent) evt).getIndex();
+ int currentSize = getModel().getFlight().sizeObserver();
+
+ if (currentSize < oldSize) {
+ ui.getTransectTableModel().fireTableDataChanged();
+ }
+ }
+ }
+ };
+
+ protected PropertyChangeListener currentRouteListener = new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+
+ Route oldValue = (Route) evt.getOldValue();
+ if (oldValue != null) {
+ ui.getTransectTableModel().fireTableRowUpdated(oldValue.getTransectFlight());
+ }
+ Route newValue = (Route) evt.getNewValue();
+ if (newValue != null) {
+ ui.getTransectTableModel().fireTableRowUpdated(newValue.getTransectFlight());
+ }
+ }
+ };
+
+ protected PropertyChangeListener nextTransectListener = new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ ui.getTransectTableModel().fireTableRowUpdated((TransectFlight) evt.getOldValue());
+ ui.getTransectTableModel().fireTableRowUpdated((TransectFlight) evt.getNewValue());
+ }
+ };
+
protected PropertyChangeListener transectFlightListener = new PropertyChangeListener() {
@Override
@@ -951,11 +980,15 @@
@Override
public void stateChanged(DeviceStateEvent event) {
+ DeviceTechnicalException error = event.getError();
if (event.getOldValue() != DeviceState.ERROR &&
event.getNewValue() == DeviceState.ERROR &&
- event.getError() != null) {
+ error != null) {
- context.setStatusMessage(event.getError().getMessageWithCause());
+ if (logger.isErrorEnabled()) {
+ logger.error(error.getMessageWithCause(), error);
+ }
+ context.setStatusMessage(error.getMessageWithCause());
}
}
};
Deleted: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectBooleanTableCell.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectBooleanTableCell.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectBooleanTableCell.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -1,117 +0,0 @@
-package fr.ulr.sammoa.ui.swing.flight;
-/*
- * #%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 jaxx.runtime.swing.JAXXWidgetUtil;
-import jaxx.runtime.swing.editor.BooleanCellEditor;
-
-import javax.swing.AbstractCellEditor;
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JTable;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableCellRenderer;
-import java.awt.Component;
-import java.util.List;
-
-/**
- * TODO
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since TODO
- */
-public class TransectBooleanTableCell extends AbstractCellEditor
- implements TableCellRenderer, TableCellEditor {
-
- private static final long serialVersionUID = 1L;
-
- protected final BooleanCellEditor delegateEditor;
-
- protected final List<JButton> actionButtons;
-
- public TransectBooleanTableCell(TableCellRenderer cellRenderer,
- List<JButton> actionButtons) {
- delegateEditor = JAXXWidgetUtil.newBooleanTableCellEditor(cellRenderer);
- this.actionButtons = actionButtons;
- }
-
- @Override
- public Component getTableCellRendererComponent(JTable table,
- Object value,
- boolean isSelected,
- boolean hasFocus,
- int row,
- int column) {
-
- TransectTableModel.TransectColumn transectColumn =
- TransectTableModel.TransectColumn.valueOf(column);
-
- Component result = null;
- switch (transectColumn) {
-
- case DELETED:
- JComponent render = (JComponent) delegateEditor.getTableCellRendererComponent(
- table, value, isSelected, hasFocus, row, column);
-
- result = render;
- break;
- case ACTION:
- JButton button = actionButtons.get(row);
- button.setEnabled((Boolean) value);
- result = button;
-
- default:
- }
- return result;
- }
-
-
- @Override
- public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
-
- TransectTableModel.TransectColumn transectColumn =
- TransectTableModel.TransectColumn.valueOf(column);
-
- Component result = null;
- switch (transectColumn) {
-
- case DELETED:
- result = delegateEditor.getTableCellEditorComponent(
- table, value, isSelected, row, column);
- break;
- case ACTION:
- JButton button = actionButtons.get(row);
- button.setEnabled((Boolean) value);
- result = button;
-
- default:
- }
- return result;
- }
-
- @Override
- public Object getCellEditorValue() {
- return delegateEditor.getCellEditorValue();
- }
-}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectFlightModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectFlightModel.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectFlightModel.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -24,6 +24,7 @@
*/
import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import fr.ulr.sammoa.persistence.Flight;
@@ -159,4 +160,22 @@
protected Flight getFlight() {
return flightModel.getFlight();
}
+
+ public static Predicate<TransectFlightModel> withTransectFlight(TransectFlight transectFlight) {
+ return new WithTransectFlightPredicate(transectFlight);
+ }
+
+ protected static class WithTransectFlightPredicate implements Predicate<TransectFlightModel> {
+
+ protected TransectFlight transectFlight;
+
+ public WithTransectFlightPredicate(TransectFlight transectFlight) {
+ this.transectFlight = transectFlight;
+ }
+
+ @Override
+ public boolean apply(TransectFlightModel input) {
+ return transectFlight.equals(input.getSource());
+ }
+ }
}
Deleted: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTable.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTable.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTable.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -1,260 +0,0 @@
-/*
- * #%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%
- */
-package fr.ulr.sammoa.ui.swing.flight;
-
-import com.google.common.collect.Lists;
-import fr.ulr.sammoa.persistence.Flight;
-import fr.ulr.sammoa.persistence.Route;
-import fr.ulr.sammoa.persistence.TransectFlight;
-import fr.ulr.sammoa.ui.swing.SammoaColors;
-import fr.ulr.sammoa.ui.swing.SammoaUIContext;
-import fr.ulr.sammoa.ui.swing.action.NextTransectAction;
-import fr.ulr.sammoa.ui.swing.util.ColorTableCellRenderer;
-import org.jdesktop.swingx.JXTable;
-
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.JButton;
-import javax.swing.event.TableModelEvent;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumn;
-import java.beans.IndexedPropertyChangeEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.List;
-
-/**
- * Created: 15/06/12.
- * <p/>
- * TODO tchemit-2012-08-14 Remove this object, use a simple JTXTable and put
- * TODO tchemit-2012-08-14 all the init code in handler.
- *
- * @author fdesbois <desbois(a)codelutin.com>
- */
-public class TransectTable extends JXTable {
-
- private static final long serialVersionUID = 1L;
-
-// private static final Logger logger = LoggerFactory.getLogger(TransectTable.class);
-
-// protected static final ImageIcon ACTION_ICON = Resource.getIcon("/icons/action-next-transect.png");
-
-// protected TransectTableHandler handler;
-
- protected List<JButton> actionButtons;
-
- public TransectTable(TransectTableModel model) {
- super(model);
-
- for (int i = 0; i < getModel().getRowCount(); i++) {
- addActionButton(i);
- }
-
- PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- String propertyName = evt.getPropertyName();
-
- if (FlightUIModel.PROPERTY_CURRENT_ROUTE.equals(propertyName)) {
-
- onCurrentRouteChanged(
- (Route) evt.getOldValue(), (Route) evt.getNewValue());
-
- } else if (FlightUIModel.PROPERTY_NEXT_TRANSECT.equals(propertyName)) {
-
- onNextTransectChanged(
- (TransectFlight) evt.getOldValue(), (TransectFlight) evt.getNewValue());
-
-// } else if (Flight.PROPERTY_TRANSECT_FLIGHT.equals(propertyName)) {
-//
-// IndexedPropertyChangeEvent indexedEvent = (IndexedPropertyChangeEvent) evt;
-// onFlightTransectsAdded(indexedEvent);
-
- } else if (Flight.PROPERTY_OBSERVER.equals(propertyName)) {
-
- IndexedPropertyChangeEvent indexedEvent = (IndexedPropertyChangeEvent) evt;
- onFlightObserversChanged(indexedEvent);
- }
- }
- };
-
- Flight flight = getModel().getFlight();
- if (flight != null) {
-
- flight.addPropertyChangeListener(Flight.PROPERTY_TRANSECT_FLIGHT, propertyChangeListener);
- flight.addPropertyChangeListener(Flight.PROPERTY_OBSERVER, propertyChangeListener);
- }
-
- SammoaUIContext.getUIContext().getFlightUIHandler().getModel().addPropertyChangeListener(propertyChangeListener);
- }
-
-// public TransectTableHandler getHandler() {
-// return handler;
-// }
-
- public List<JButton> getActionButtons() {
- if (actionButtons == null) {
- actionButtons = Lists.newArrayList();
- }
- return actionButtons;
- }
-
- public int getLastSelectedRow() {
- int result;
- int nbRows = getSelectedRows().length;
- if (nbRows > 0) {
- result = getSelectedRows()[nbRows - 1];
-
- } else {
- // No line selected
- result = -1;
- }
- return result;
- }
-
- @Override
- public TransectTableModel getModel() {
- return (TransectTableModel) super.getModel();
- }
-
- @Override
- public void tableChanged(TableModelEvent e) {
-
- // On fire INSERT, create buttons associated with each new rows
- if (e.getType() == TableModelEvent.INSERT) {
-
- for (int i = e.getFirstRow(); i <= e.getLastRow(); i++) {
- addActionButton(i);
- }
- }
-
- super.tableChanged(e);
- }
-
- public JButton addActionButton(int index) {
-
- JButton result = new JButton();
-
- // use client property used in Action to retrieve the correct transect
- result.putClientProperty(NextTransectAction.CLIENT_PROPERTY_INDEX, index);
- result.putClientProperty("actionName", "nextTransect");
-
- ActionMap actionMap = getModel().getReference().getActionMap();
- if (actionMap != null) {
- Action nextTransectAction = FlightUIHandler.getAction(actionMap, "nextTransect");
- result.setAction(nextTransectAction);
- }
-
-// result.setIcon(ACTION_ICON);
-// result.addActionListener(new ActionListener() {
-//
-// @Override
-// public void actionPerformed(ActionEvent e) {
-// JButton button = (JButton) e.getSource();
-// int index = (Integer) button.getClientProperty("index");
-// TransectFlight transectFlight = getModel().getRow(index);
-// getHandler().setNextTransect(transectFlight);
-// }
-// });
-
- getActionButtons().add(index, result);
-
- return result;
- }
-
- /**
- * Initialize column header colors for position left and position right
- *
- * @see ColorTableCellRenderer
- */
- protected void initPositionColumnHeaderColors() {
-
- TableCellRenderer defaultRenderer = getDefaultRenderer(String.class);
-
- // Position left column
- {
- TableColumn column = getColumn(TransectTableModel.TransectColumn.POSITION_LEFT.ordinal());
- column.setHeaderRenderer(new ColorTableCellRenderer(defaultRenderer, SammoaColors.POSITION_LEFT_COLOR));
- }
-
- // Position right column
- {
- TableColumn column = getColumn(TransectTableModel.TransectColumn.POSITION_RIGHT.ordinal());
- column.setHeaderRenderer(new ColorTableCellRenderer(defaultRenderer, SammoaColors.POSITION_RIGHT_COLOR));
- }
- }
-
- public void onCurrentRouteChanged(Route oldValue, Route newValue) {
-
- // Change of flight route status : begin, add, cb, end
-
- if (oldValue != null) {
- TransectFlight transect = oldValue.getTransectFlight();
- if (transect != null) {
- updateTransectRow(transect);
- }
- }
- if (newValue != null) {
- TransectFlight transect = newValue.getTransectFlight();
- if (transect != null) {
- updateTransectRow(transect);
- }
- }
- }
-
- public void onNextTransectChanged(TransectFlight oldValue, TransectFlight newValue) {
-
- if (oldValue != null) {
- updateTransectRow(oldValue);
- }
- if (newValue != null) {
- updateTransectRow(newValue);
- }
- }
-
-// public void onFlightTransectsAdded(IndexedPropertyChangeEvent evt) {
-//
-// int index = evt.getIndex();
-//
-// getModel().fireTableRowsInserted(index, index);
-// }
-
- public void onFlightObserversChanged(IndexedPropertyChangeEvent evt) {
-
- // Refresh all the table if some observer is removed (index = old collection size)
- int oldSize = evt.getIndex();
- int currentSize = getModel().getFlight().sizeObserver();
-
- if (currentSize < oldSize) {
- getModel().fireTableDataChanged();
- }
- }
-
- protected void updateTransectRow(TransectFlight transectFlight) {
-
- int index = getModel().getTransectFlightModel(transectFlight).getIndex();
-
- getModel().fireTableRowsUpdated(index, index);
- }
-}
Deleted: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableHandler.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableHandler.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -1,160 +0,0 @@
-/*
- * #%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%
- */
-package fr.ulr.sammoa.ui.swing.flight;
-
-import fr.ulr.sammoa.persistence.Flight;
-import fr.ulr.sammoa.persistence.Route;
-import fr.ulr.sammoa.persistence.TransectFlight;
-import fr.ulr.sammoa.ui.swing.SammoaUIContext;
-
-import java.beans.IndexedPropertyChangeEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-/**
- * Created: 18/06/12
- * FIXME tchemit-2012-08-14 Remove this handler
- *
- * @author fdesbois <desbois(a)codelutin.com>
- * @deprecated I will remove this before release 0.6
- */
-@Deprecated
-public class TransectTableHandler implements PropertyChangeListener {
-
- protected TransectTable view;
-
- public TransectTableHandler(TransectTable view) {
- this.view = view;
- }
-
- @Deprecated
- public FlightUIModel getFlightUIModel() {
- return SammoaUIContext.getUIContext().getFlightUIHandler().getModel();
- }
-
- public void init() {
- getFlightUIModel().addPropertyChangeListener(this);
-
- Flight flight = getModel().getFlight();
- if (flight != null) {
- flight.addPropertyChangeListener(Flight.PROPERTY_TRANSECT_FLIGHT, this);
- flight.addPropertyChangeListener(Flight.PROPERTY_OBSERVER, this);
- }
- }
-
- public TransectTableModel getModel() {
- return view.getModel();
- }
-
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
-
- String propertyName = evt.getPropertyName();
-
- if (FlightUIModel.PROPERTY_CURRENT_ROUTE.equals(propertyName)) {
-
- onCurrentRouteChanged(
- (Route) evt.getOldValue(), (Route) evt.getNewValue());
-
- } else if (FlightUIModel.PROPERTY_NEXT_TRANSECT.equals(propertyName)) {
-
- onNextTransectChanged(
- (TransectFlight) evt.getOldValue(), (TransectFlight) evt.getNewValue());
-
-// } else if (Flight.PROPERTY_TRANSECT_FLIGHT.equals(propertyName)) {
-//
-// IndexedPropertyChangeEvent indexedEvent = (IndexedPropertyChangeEvent) evt;
-// onFlightTransectsAdded(indexedEvent);
-
- } else if (Flight.PROPERTY_OBSERVER.equals(propertyName)) {
-
- IndexedPropertyChangeEvent indexedEvent = (IndexedPropertyChangeEvent) evt;
- onFlightObserversChanged(indexedEvent);
- }
- }
-//
-// public void onFlightChanged(Flight oldValue, Flight newValue) {
-//
-// if (oldValue != null) {
-// oldValue.removePropertyChangeListener(this);
-// }
-// newValue.addPropertyChangeListener(Flight.PROPERTY_TRANSECT_FLIGHT, this);
-// newValue.addPropertyChangeListener(Flight.PROPERTY_OBSERVER, this);
-//
-// getModel().fireTableDataChanged();
-// }
-
- public void onCurrentRouteChanged(Route oldValue, Route newValue) {
-
- // Change of flight route status : begin, add, cb, end
-
- if (oldValue != null) {
- TransectFlight transect = oldValue.getTransectFlight();
- if (transect != null) {
- updateTransectRow(transect);
- }
- }
- if (newValue != null) {
- TransectFlight transect = newValue.getTransectFlight();
- if (transect != null) {
- updateTransectRow(transect);
- }
- }
- }
-
- public void onNextTransectChanged(TransectFlight oldValue, TransectFlight newValue) {
-
- if (oldValue != null) {
- updateTransectRow(oldValue);
- }
- if (newValue != null) {
- updateTransectRow(newValue);
- }
- }
-
-// public void onFlightTransectsAdded(IndexedPropertyChangeEvent evt) {
-//
-// int index = evt.getIndex();
-//
-// getModel().fireTableRowsInserted(index, index);
-// }
-
- public void onFlightObserversChanged(IndexedPropertyChangeEvent evt) {
-
- // Refresh all the table if some observer is removed (index = old collection size)
- int oldSize = evt.getIndex();
- int currentSize = getModel().getFlight().sizeObserver();
-
- if (currentSize < oldSize) {
- getModel().fireTableDataChanged();
- }
- }
-
- protected void updateTransectRow(TransectFlight transectFlight) {
-
- int index = getModel().getTransectFlightModel(transectFlight).getIndex();
-
- getModel().fireTableRowsUpdated(index, index);
- }
-}
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableModel.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/TransectTableModel.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -24,7 +24,6 @@
*/
package fr.ulr.sammoa.ui.swing.flight;
-import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import fr.ulr.sammoa.persistence.Flight;
@@ -36,7 +35,7 @@
import fr.ulr.sammoa.persistence.TransectFlight;
import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
-import javax.swing.SwingUtilities;
+import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.util.List;
@@ -70,18 +69,6 @@
return reference.getNextTransect();
}
- @Deprecated
- public TransectFlightModel getTransectFlightModel(final TransectFlight transectFlight) {
- TransectFlightModel result = Iterables.find(getTransectFlights(), new Predicate<TransectFlightModel>() {
-
- @Override
- public boolean apply(TransectFlightModel input) {
- return input.getSource().equals(transectFlight);
- }
- });
- return result;
- }
-
public List<TransectFlightModel> getTransectFlights() {
return reference.getTransectFlights();
}
@@ -90,10 +77,21 @@
return getTransectFlights().get(index);
}
-// public int getRowIndex(TransectFlightModel transectFlight) {
-// return Iterables.indexOf(getTransectFlights(), Predicates.equalTo(transectFlight));
-// }
+ public int getRowIndex(final TransectFlight transectFlight) {
+ int result = Iterables.indexOf(
+ getTransectFlights(),
+ TransectFlightModel.withTransectFlight(transectFlight)
+ );
+ return result;
+ }
+ public void fireTableRowUpdated(TransectFlight transectFlight) {
+ if (transectFlight != null) {
+ int index = getRowIndex(transectFlight);
+ fireTableRowsUpdated(index, index);
+ }
+ }
+
@Override
public String getColumnName(int column) {
List<String> labels = TransectColumn.getLabels();
@@ -281,12 +279,11 @@
ACTION(
_("sammoa.flightPanel.table.column.action"),
true,
- Boolean.class
+ TransectFlightModel.class
) {
@Override
public Object getValue(int index, TransectFlightModel bean) {
- // Action is available if bean is not deleted
- return !bean.isDeleted();
+ return bean;
}
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -23,6 +23,7 @@
* #L%
*/
+import com.google.common.base.Supplier;
import fr.ulr.sammoa.application.FlightService;
import fr.ulr.sammoa.application.device.DeviceState;
import fr.ulr.sammoa.application.device.DeviceStateEvent;
@@ -47,6 +48,7 @@
import fr.ulr.sammoa.ui.swing.observations.action.MoveToPreviousEditableCellAction;
import fr.ulr.sammoa.ui.swing.observations.action.MoveToPreviousRowEditableAction;
import fr.ulr.sammoa.ui.swing.util.AbstractRowHighlightPredicate;
+import fr.ulr.sammoa.ui.swing.util.ButtonActionTableCellEditorRenderer;
import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
import fr.ulr.sammoa.ui.swing.util.TableDataChangeListener;
import fr.ulr.sammoa.ui.swing.util.TextCellEditor;
@@ -66,16 +68,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.AbstractCellEditor;
-import javax.swing.Action;
-import javax.swing.DefaultCellEditor;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.ListCellRenderer;
-import javax.swing.ListSelectionModel;
-import javax.swing.SwingUtilities;
+import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
@@ -85,9 +78,7 @@
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Rectangle;
+import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
@@ -441,7 +432,17 @@
// set renderer and editor as button for circle back action
int circleBack = ObservationTableModel.ObservationColumn.CIRCLE_BACK.ordinal();
- CircleBackEditorRenderer editorRenderer = new CircleBackEditorRenderer(getFlightUIModel());
+ ButtonActionTableCellEditorRenderer editorRenderer = new ButtonActionTableCellEditorRenderer(
+ CircleBackAction.CLIENT_PROPERTY_OBSERVATION,
+ new Supplier<Action>() {
+
+ @Override
+ public Action get() {
+ return FlightUIHandler.getAction(getFlightUIModel().getActionMap(), "circleBack");
+ }
+ },
+ null
+ );
TableColumn column = dataTable.getColumnModel().getColumn(circleBack);
column.setCellEditor(editorRenderer);
@@ -751,50 +752,50 @@
return model.getBean(rowIndex);
}
}
+//
+// /**
+// * Editeur/renderer des observations sous forme de bouton permettant
+// * de rentrer en mode circle back sur l'observation choisie.
+// */
+// public static class CircleBackEditorRenderer extends AbstractCellEditor
+// implements TableCellRenderer, TableCellEditor {
+//
+// private static final long serialVersionUID = 1L;
+//
+//
+// private final FlightUIModel fligthModel;
+//
+// public CircleBackEditorRenderer(FlightUIModel fligthModel) {
+// this.fligthModel = fligthModel;
+// }
+//
+// @Override
+// public Object getCellEditorValue() {
+// return null;
+// }
+//
+// @Override
+// public Component getTableCellEditorComponent(JTable table,
+// Object value, boolean isSelected, int row, int column) {
+// final Observation observation = (Observation) value;
+// final JButton result = new JButton();
+// // FIXME-fdesbois-2012-07-08 : improve that, can't do any init... on new button, action is retrieve from actionMap
+// if (fligthModel.getActionMap() != null) {
+// Action circleBackAction = FlightUIHandler.getAction(fligthModel.getActionMap(), "circleBack");
+// result.setAction(circleBackAction);
+// }
+// result.putClientProperty(CircleBackAction.CLIENT_PROPERTY_OBSERVATION, observation);
+// return result;
+// }
+//
+// @Override
+// public Component getTableCellRendererComponent(JTable table,
+// Object value, boolean isSelected, boolean hasFocus, int row,
+// int column) {
+// return getTableCellEditorComponent(table, value, isSelected, row, column);
+// }
+// }
- /**
- * Editeur/renderer des observations sous forme de bouton permettant
- * de rentrer en mode circle back sur l'observation choisie.
- */
- public static class CircleBackEditorRenderer extends AbstractCellEditor
- implements TableCellRenderer, TableCellEditor {
-
- private static final long serialVersionUID = 1L;
-
-
- private final FlightUIModel fligthModel;
-
- public CircleBackEditorRenderer(FlightUIModel fligthModel) {
- this.fligthModel = fligthModel;
- }
-
- @Override
- public Object getCellEditorValue() {
- return null;
- }
-
- @Override
- public Component getTableCellEditorComponent(JTable table,
- Object value, boolean isSelected, int row, int column) {
- final Observation observation = (Observation) value;
- final JButton result = new JButton();
- // FIXME-fdesbois-2012-07-08 : improve that, can't do any init... on new button, action is retrieve from actionMap
- if (fligthModel.getActionMap() != null) {
- Action circleBackAction = FlightUIHandler.getAction(fligthModel.getActionMap(), "circleBack");
- result.setAction(circleBackAction);
- }
- result.putClientProperty(CircleBackAction.CLIENT_PROPERTY_OBSERVATION, observation);
- return result;
- }
-
- @Override
- public Component getTableCellRendererComponent(JTable table,
- Object value, boolean isSelected, boolean hasFocus, int row,
- int column) {
- return getTableCellEditorComponent(table, value, isSelected, row, column);
- }
- }
-
public static class ObservationForSelectedRouteHighlightPredicate extends AbstractRowHighlightPredicate {
protected FlightUIModel UIModel;
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -0,0 +1,75 @@
+package fr.ulr.sammoa.ui.swing.util;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Maps;
+
+import javax.swing.*;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import java.awt.*;
+import java.util.Map;
+
+/**
+ * Created: 20/08/12
+ *
+ * @author fdesbois <florian.desbois(a)codelutin.com>
+ */
+public class ButtonActionTableCellEditorRenderer extends AbstractCellEditor
+ implements TableCellRenderer, TableCellEditor {
+
+ protected String actionPropertyName;
+
+ protected Supplier<Action> actionSupplier;
+
+ protected Predicate<Object> enabledPredicate;
+
+ protected Map<Object, JButton> cache;
+
+ public ButtonActionTableCellEditorRenderer(String actionPropertyName,
+ Supplier<Action> actionSupplier,
+ Predicate<Object> enabledPredicate) {
+
+ this.actionPropertyName = actionPropertyName;
+ this.actionSupplier = actionSupplier;
+ this.enabledPredicate = enabledPredicate;
+ this.cache = Maps.newHashMap();
+ }
+
+ @Override
+ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+ Component result = getButton(value);
+ if (enabledPredicate != null) {
+ result.setEnabled(enabledPredicate.apply(value));
+ }
+ return result;
+ }
+
+ @Override
+ public Object getCellEditorValue() {
+ return null;
+ }
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+ Component result = getButton(value);
+ if (enabledPredicate != null) {
+ result.setEnabled(enabledPredicate.apply(value));
+ }
+ return result;
+ }
+
+ protected JButton getButton(Object bean) {
+ JButton result = cache.get(bean);
+ if (result == null) {
+
+ result = new JButton();
+
+ result.putClientProperty(actionPropertyName, bean);
+ result.setAction(actionSupplier.get());
+
+ cache.put(bean, result);
+ }
+ return result;
+ }
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/ButtonActionTableCellEditorRenderer.java
___________________________________________________________________
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/util/SammoaUtil.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java 2012-08-20 15:11:50 UTC (rev 450)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java 2012-08-20 16:13:19 UTC (rev 451)
@@ -36,18 +36,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.Action;
-import javax.swing.JComponent;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JOptionPane;
-import javax.swing.JRootPane;
-import javax.swing.KeyStroke;
-import javax.swing.UIManager;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Dimension;
+import javax.swing.*;
+import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
@@ -261,4 +251,17 @@
JOptionPane.YES_NO_OPTION);
return i == JOptionPane.YES_OPTION;
}
+
+ public static int getLastSelectedRow(JTable table) {
+ int result;
+ int nbRows = table.getSelectedRows().length;
+ if (nbRows > 0) {
+ result = table.getSelectedRows()[nbRows - 1];
+
+ } else {
+ // No line selected
+ result = -1;
+ }
+ return result;
+ }
}
1
0
r450 - trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps
by fdesbois@users.forge.codelutin.com 20 Aug '12
by fdesbois@users.forge.codelutin.com 20 Aug '12
20 Aug '12
Author: fdesbois
Date: 2012-08-20 17:11:50 +0200 (Mon, 20 Aug 2012)
New Revision: 450
Url: http://forge.codelutin.com/repositories/revision/sammoa/450
Log:
resolve NPE in FakeGpsHandler
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java 2012-08-20 14:27:46 UTC (rev 449)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java 2012-08-20 15:11:50 UTC (rev 450)
@@ -131,11 +131,16 @@
@Override
public GeoPoint getCurrentLocation() {
GeoPoint result;
- // Location already saved, return null (i.e. no new location)
- if (currentLocation == null || currentLocation.getTopiaId() != null) {
+ if (currentLocation == null) {
result = new GeoPointImpl(GeoPoints.EMPTY_COORDINATE, GeoPoints.EMPTY_COORDINATE);
- currentLocation.setRecordTime(new Date());
+ result.setRecordTime(new Date());
+ } else if (currentLocation.getTopiaId() != null) {
+ result = new GeoPointImpl(currentLocation.getLatitude(), currentLocation.getLongitude());
+ result.setAltitude(currentLocation.getAltitude());
+ result.setSpeed(currentLocation.getSpeed());
+ result.setRecordTime(new Date());
+
} else {
result = currentLocation;
}
1
0
20 Aug '12
Author: tchemit
Date: 2012-08-20 16:27:46 +0200 (Mon, 20 Aug 2012)
New Revision: 449
Url: http://forge.codelutin.com/repositories/revision/sammoa/449
Log:
rename io.input.sammoa in io.input.application and io.output.sammoa into io.output.application
Added:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationCallbackMode.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.css
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.jaxx
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIModel.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java
Removed:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/sammoa/
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/sammoa/
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/java-info.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/output/application/ExportApplicationModel.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/java-info.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/sammoa/ImportApplicationModel.java 2012-08-20 14:10:50 UTC (rev 446)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationModel.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -1,4 +1,4 @@
-package fr.ulr.sammoa.application.io.input.sammoa;
+package fr.ulr.sammoa.application.io.input.application;
/*
* #%L
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/sammoa/ImportApplicationService.java 2012-08-20 14:10:50 UTC (rev 446)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -1,4 +1,4 @@
-package fr.ulr.sammoa.application.io.input.sammoa;
+package fr.ulr.sammoa.application.io.input.application;
/*
* #%L
* SAMMOA :: Application
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/java-info.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/sammoa/java-info.java 2012-08-20 14:10:50 UTC (rev 446)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/java-info.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -1,9 +1,9 @@
/**
- * Base package for sammo import.
+ * Base package for application import from a {@code sammoa} file.
*
* @since 0.6
*/
-package fr.ulr.sammoa.application.io.input.sammoa;
+package fr.ulr.sammoa.application.io.input.application;
/*
* #%L
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-20 14:18:24 UTC (rev 448)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/map/ImportMapService.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -191,9 +191,9 @@
if (logger.isDebugEnabled()) {
logger.debug("Create new transect {}" +
- "(graphicIndex = {})",
- newTransect.getName(),
- graphicIndex
+ "(graphicIndex = {})",
+ newTransect.getName(),
+ graphicIndex
);
}
@@ -203,10 +203,10 @@
if (logger.isWarnEnabled()) {
logger.warn("The transect {} already " +
- "exists and will be ignored " +
- "(graphicIndex = {})",
- existTransect.getName(),
- graphicIndex
+ "exists and will be ignored " +
+ "(graphicIndex = {})",
+ existTransect.getName(),
+ graphicIndex
);
}
}
@@ -254,7 +254,7 @@
if (logger.isDebugEnabled()) {
logger.debug("Create new strate {}",
- newStrate.getCode()
+ newStrate.getCode()
);
}
@@ -262,8 +262,8 @@
if (logger.isWarnEnabled()) {
logger.warn("The strate {} already " +
- "exists and will be ignored",
- existStrate.getCode());
+ "exists and will be ignored",
+ existStrate.getCode());
}
}
return result;
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationModel.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationModel.java 2012-08-20 14:10:50 UTC (rev 446)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationModel.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -1,4 +1,4 @@
-package fr.ulr.sammoa.application.io.output.sammoa;
+package fr.ulr.sammoa.application.io.output.application;
/*
* #%L
* SAMMOA :: Application
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/ExportApplicationService.java 2012-08-20 14:10:50 UTC (rev 446)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -1,4 +1,4 @@
-package fr.ulr.sammoa.application.io.output.sammoa;
+package fr.ulr.sammoa.application.io.output.application;
/*
* #%L
* SAMMOA :: Application
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/java-info.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/sammoa/java-info.java 2012-08-20 14:10:50 UTC (rev 446)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/java-info.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -1,9 +1,11 @@
/**
- * Base package for sammoa export operation.
+ * Base package for application export to a {@code sammoa} file.
*
* @since 0.6
*/
-package fr.ulr.sammoa.application.io.output.sammoa;/*
+package fr.ulr.sammoa.application.io.output.application;
+
+/*
* #%L
* SAMMOA :: Application
* $Id$
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-20 14:18:24 UTC (rev 448)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -35,9 +35,9 @@
import fr.ulr.sammoa.ui.swing.flight.FlightUI;
import fr.ulr.sammoa.ui.swing.flight.FlightUIHandler;
import fr.ulr.sammoa.ui.swing.home.HomeUI;
-import fr.ulr.sammoa.ui.swing.io.input.sammoa.ImportApplicationUI;
+import fr.ulr.sammoa.ui.swing.io.input.application.ImportApplicationUI;
+import fr.ulr.sammoa.ui.swing.io.output.application.ExportApplicationUI;
import fr.ulr.sammoa.ui.swing.io.output.map.ExportMapUI;
-import fr.ulr.sammoa.ui.swing.io.output.sammoa.ExportApplicationUI;
import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.swing.AboutPanel;
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css (from rev 446, 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/application/ImportApplicationUI.css (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,42 @@
+/*
+ * #%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";
+}
+
+#importFileEditor {
+ title: "sammoa.dialog.title.importSammoaFile";
+ exts: "sammoa";
+ extsDescription: "Sammoa files";
+ directoryEnabled:false;
+ acceptAllFileFilterUsed:false;
+}
+
+#quitButton {
+ text: "sammoa.action.quitImportApplication";
+}
+
+#importButton {
+ text: "sammoa.action.importApplication";
+}
\ No newline at end of file
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx (from rev 446, 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/application/ImportApplicationUI.jaxx (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,81 @@
+<!--
+ #%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%
+ -->
+<JPanel id='importApplicationUI' layout='{new BorderLayout()}'
+ implements='fr.ulr.sammoa.ui.swing.SammoaUI<ImportApplicationUIHandler>'>
+
+ <import>
+ fr.ulr.sammoa.persistence.Campaign
+ fr.ulr.sammoa.persistence.Flight
+ fr.ulr.sammoa.ui.swing.SammoaUIContext
+
+ jaxx.runtime.swing.editor.FileEditor
+
+ java.awt.BorderLayout
+
+ static org.nuiton.i18n.I18n._
+ </import>
+
+ <script><![CDATA[
+
+ public ImportApplicationUI(SammoaUIContext context) {
+ ImportApplicationUIHandler handler =
+ new ImportApplicationUIHandler(context, this);
+ setContextValue(handler);
+ handler.beforeInitUI();
+ }
+
+ protected void $afterCompleteSetup() {
+ getHandler().afterInitUI();
+ }
+ ]]></script>
+
+ <ImportApplicationUIModel id='model'
+ initializer='getContextValue(ImportApplicationUIModel.class)'/>
+
+ <ImportApplicationUIHandler id='handler'
+ initializer='getContextValue(ImportApplicationUIHandler.class)'/>
+
+ <Table fill='both' constraints='BorderLayout.CENTER'>
+ <!-- import file -->
+ <row>
+ <cell anchor='west'>
+ <JLabel id='importFileLbl'/>
+ </cell>
+ <cell fill='horizontal' weightx='1.0' columns='2'>
+ <FileEditor id='importFileEditor'
+ onActionPerformed='getModel().setImportFile(importFileEditor.getSelectedFile())'/>
+ </cell>
+ </row>
+ <!--import actions-->
+ <row>
+ <cell columns='5' fill="both">
+ <JPanel layout='{new GridLayout(1,2,0,0)}'>
+ <JButton id='quitButton' onActionPerformed='getHandler().close()'/>
+ <JButton id='importButton'
+ onActionPerformed='getHandler().importApplication()'/>
+ </JPanel>
+ </cell>
+ </row>
+ </Table>
+</JPanel>
\ No newline at end of file
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java (from rev 446, 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/application/ImportApplicationUIHandler.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,172 @@
+package fr.ulr.sammoa.ui.swing.io.input.application;
+/*
+ * #%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;
+import fr.ulr.sammoa.application.io.CampaignStorage;
+import fr.ulr.sammoa.application.io.input.application.ImportApplicationModel;
+import fr.ulr.sammoa.application.io.input.application.ImportApplicationService;
+import fr.ulr.sammoa.persistence.Campaign;
+import fr.ulr.sammoa.ui.swing.SammoaScreen;
+import fr.ulr.sammoa.ui.swing.SammoaUIContext;
+import fr.ulr.sammoa.ui.swing.SammoaUIHandler;
+import fr.ulr.sammoa.ui.swing.UIDecoratorService;
+import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.swing.JFrame;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+
+/**
+ * UI Handler fo {@link ImportApplicationUI}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class ImportApplicationUIHandler implements SammoaUIHandler {
+
+ private static final Logger logger =
+ LoggerFactory.getLogger(ImportApplicationUIHandler.class);
+
+ private final ImportApplicationUI ui;
+
+ protected SammoaUIContext context;
+
+ protected final ImportApplicationService importService;
+
+ protected final ReferentialService referentialService;
+
+ protected final FlightService flightService;
+
+ protected final UIDecoratorService decoratorService;
+
+ public ImportApplicationUIHandler(SammoaUIContext context,
+ ImportApplicationUI ui) {
+ this.context = context;
+ this.ui = ui;
+ this.importService = context.getService(ImportApplicationService.class);
+ this.flightService = context.getService(FlightService.class);
+ this.referentialService = context.getService(ReferentialService.class);
+ this.decoratorService = context.getService(UIDecoratorService.class);
+ }
+
+ @Override
+ public void beforeInitUI() {
+
+ //-- create model --//
+
+ ImportApplicationUIModel model = new ImportApplicationUIModel();
+
+ //-- share model and handler in jaxx context --//
+ ui.setContextValue(this);
+ ui.setContextValue(model);
+
+ model.addPropertyChangeListener(new PropertyChangeListener() {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+
+ if (ImportApplicationUIModel.PROPERTY_STORAGE.equals(evt.getPropertyName())) {
+ CampaignStorage newValue = (CampaignStorage) evt.getNewValue();
+ onCampaignStorageChanged(newValue);
+ }
+// else if (ImportApplicationUIModel.PROPERTY_FLIGHTS.equals(evt.getPropertyName())) {
+// Collection<Flight> newValue = (Collection<Flight>) evt.getNewValue();
+// onFlightsChanged(newValue);
+// } else if (ImportApplicationUIModel.PROPERTY_SELECTED_FLIGHT.equals(evt.getPropertyName())) {
+// Flight newValue = (Flight) evt.getNewValue();
+// onSelectedFlightChanged(newValue);
+// }
+ }
+ });
+ }
+
+ @Override
+ public void afterInitUI() {
+ }
+
+ @Override
+ public void onCloseUI() {
+ }
+
+ public void loadStorage(File file) {
+
+ // reset any previous loaded storage
+ getModel().setStorage(null);
+
+ // load storage
+ CampaignStorage storage = importService.loadCampaignStorage(file);
+
+ // save it in model
+ getModel().setStorage(storage);
+
+ }
+
+ public void importApplication() {
+
+ JFrame frame = ui.getParentContainer(JFrame.class);
+ SammoaUtil.updateBusyState(frame, true);
+
+ try {
+ ImportApplicationModel dataModel = getModel().toModel();
+ importService.importApplication(dataModel);
+
+ } finally {
+ SammoaUtil.updateBusyState(frame, false);
+ }
+ }
+
+ public void close() {
+ context.changeScreen(SammoaScreen.HOME);
+ }
+
+ protected ImportApplicationUIModel getModel() {
+ return ui.getModel();
+ }
+
+ protected void onCampaignStorageChanged(CampaignStorage storage) {
+ String campaignId = storage.getId();
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Will load campaing {}", campaignId);
+ }
+ Campaign campaign = referentialService.getCampaign(campaignId);
+ ImportApplicationUIModel model = getModel();
+
+
+ if (campaign == null) {
+
+ // new campaign
+ model.setNewCampaign(campaign);
+ } else {
+
+ // existing campaign
+ model.setExistingCampaign(campaign);
+ }
+ }
+
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java (from rev 446, 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/application/ImportApplicationUIModel.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,161 @@
+package fr.ulr.sammoa.ui.swing.io.input.application;
+/*
+ * #%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 com.google.common.collect.Lists;
+import fr.ulr.sammoa.application.io.CampaignStorage;
+import fr.ulr.sammoa.application.io.input.application.ImportApplicationModel;
+import fr.ulr.sammoa.persistence.Campaign;
+import fr.ulr.sammoa.persistence.Flight;
+import org.jdesktop.beans.AbstractSerializableBean;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Model for sammoa import.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class ImportApplicationUIModel extends AbstractSerializableBean {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String PROPERTY_EXISTING_CAMPAIGN = "existingCampaign";
+
+ public static final String PROPERTY_EXISTING_FLIGHTS = "existingFlights";
+
+ public static final String PROPERTY_NEW_CAMPAIGN = "newCampaign";
+
+ public static final String PROPERTY_NEW_FLIGHTS = "newFlights";
+
+ public static final String PROPERTY_SELECTED_FLIGHT_IDS = "selectedFlightIds";
+
+ public static final String PROPERTY_IMPORT_FILE = "importFile";
+
+ public static final String PROPERTY_STORAGE = "storage";
+
+ /** File to import. */
+ protected File importFile;
+
+ /** Loaded campaign storage. */
+ protected CampaignStorage storage;
+
+ /** Existing campaign. */
+ protected Campaign existingCampaign;
+
+ /** existing existingFlights on db. */
+ protected List<Flight> existingFlights;
+
+ /** New campaign to import (read from the import file). */
+ protected Campaign newCampaign;
+
+ /** New existingFlights to import (read from the import file). */
+ protected List<Flight> newFlights;
+
+ /** Selected flight ids to imports. */
+ protected List<String> selectedFlightIds;
+
+ public File getImportFile() {
+ return importFile;
+ }
+
+ public void setImportFile(File importFile) {
+ File oldValue = this.importFile;
+ this.importFile = importFile;
+ firePropertyChange(PROPERTY_IMPORT_FILE, oldValue, importFile);
+ }
+
+ public CampaignStorage getStorage() {
+ return storage;
+ }
+
+ public void setStorage(CampaignStorage storage) {
+ CampaignStorage oldValue = this.storage;
+ this.storage = storage;
+ firePropertyChange(PROPERTY_STORAGE, oldValue, storage);
+ }
+
+ public Campaign getExistingCampaign() {
+ return existingCampaign;
+ }
+
+ public void setExistingCampaign(Campaign existingCampaign) {
+ Campaign oldValue = this.existingCampaign;
+ this.existingCampaign = existingCampaign;
+ firePropertyChange(PROPERTY_EXISTING_CAMPAIGN, oldValue, existingCampaign);
+ }
+
+ public List<Flight> getExistingFlights() {
+ if (existingFlights == null) {
+ existingFlights = Lists.newArrayList();
+ }
+ return existingFlights;
+ }
+
+ public void setExistingFlights(List<Flight> existingFlights) {
+ List<Flight> oldValue = this.existingFlights;
+ this.existingFlights = existingFlights;
+ firePropertyChange(PROPERTY_EXISTING_FLIGHTS, oldValue, existingFlights);
+ }
+
+ public List<Flight> getNewFlights() {
+ return newFlights;
+ }
+
+ public void setNewFlights(List<Flight> newFlights) {
+ List<Flight> oldValue = this.newFlights;
+ this.newFlights = newFlights;
+ firePropertyChange(PROPERTY_NEW_FLIGHTS, oldValue, newFlights);
+ }
+
+ public Campaign getNewCampaign() {
+ return newCampaign;
+ }
+
+ public void setNewCampaign(Campaign newCampaign) {
+ Campaign oldValue = this.newCampaign;
+ this.newCampaign = newCampaign;
+ firePropertyChange(PROPERTY_NEW_CAMPAIGN, oldValue, newCampaign);
+ }
+
+ public List<String> getSelectedFlightIds() {
+ return selectedFlightIds;
+ }
+
+ public void setSelectedFlightIds(List<String> selectedFlightIds) {
+ List<String> oldValue = this.selectedFlightIds;
+ this.selectedFlightIds = selectedFlightIds;
+ firePropertyChange(PROPERTY_SELECTED_FLIGHT_IDS, oldValue, selectedFlightIds);
+ }
+
+ public ImportApplicationModel toModel() {
+ ImportApplicationModel result = ImportApplicationModel.newModel(
+ getImportFile(),
+ getSelectedFlightIds()
+ );
+ return result;
+ }
+}
\ No newline at end of file
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,6 @@
+/**
+ * Package for import application from a {@code sammoa} file.
+ *
+ * @since 0.6
+ */
+package fr.ulr.sammoa.ui.swing.io.input.application;
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/java-info.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationCallbackMode.java (from rev 446, trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationCallbackMode.java)
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationCallbackMode.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationCallbackMode.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,56 @@
+package fr.ulr.sammoa.ui.swing.io.output.application;
+/*
+ * #%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%
+ */
+
+/**
+ * What to do after a application export.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public enum ExportApplicationCallbackMode {
+ /**
+ * Do nothing.
+ * <p/>
+ * Says after this every thing stay in place.
+ */
+ NOTHING,
+ /**
+ * Remove flight data.
+ * <p/>
+ * Says after this referential are still there (Region, Campaign, Strate, Observer, Species).
+ */
+ REMOVE_FLIGHTS,
+ /**
+ * Remove campaing data.
+ * <p/>
+ * Says after this referential are still there (Region, Species).
+ */
+ REMOVE_CAMPAIGN, /**
+ * Remove campaign data.
+ * <p/>
+ * Says after this, there is no more stuff in db.
+ */
+ REMOVE_ALL
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationCallbackMode.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.css (from rev 446, trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUI.css)
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.css (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.css 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,105 @@
+/*
+ * #%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%
+ */
+
+JRadioButton {
+ buttonGroup:"callbacks";
+}
+
+#model {
+ callback: {(ExportApplicationCallbackMode) callbacks.getSelectedValue()};
+}
+
+#callbacks {
+ selectedValue:{model.getCallback()};
+}
+
+#campaignLabel {
+ text: "sammoa.label.campaign";
+}
+
+/*#campaignCombobox {
+ renderer: {new DecoratorProviderListCellRenderer(getHandler().getDecoratorProvider())};
+}*/
+
+#flightLabel {
+ text: "sammoa.label.flight";
+}
+
+/*#flightCombobox {
+ renderer: {new DecoratorProviderListCellRenderer(getHandler().getDecoratorProvider())};
+}*/
+
+#quitButton {
+ text:"sammoa.action.quitExportMaps";
+}
+
+#exportButton {
+ text:"sammoa.action.exportApplication";
+ enabled:{model.isValid()};
+}
+
+#exportDirectoryFileChooseAction {
+ actionIcon:"fileChooser";
+}
+
+#exportDirectoryLbl {
+ text:"sammoa.label.exportApplicationDirectory";
+}
+
+#exportDirectory {
+ text:{model.getExportDirectory().getAbsolutePath()};
+}
+
+#exportFilenameLbl {
+ text:"sammoa.label.exportApplicationFilename";
+}
+
+#exportFilename {
+ text:{model.getExportFilename()};
+}
+
+#callbackLbl {
+ text:"sammoa.label.exportApplication.callbacks";
+}
+
+#callbackNothing {
+ text:"sammoa.label.exportApplication.callbackNothing";
+ selected:true;
+ value:{ExportApplicationCallbackMode.NOTHING};
+}
+
+#callbackRemoveFlightData {
+ text:"sammoa.label.exportApplication.callbackRemoveFlightData";
+ value:{ExportApplicationCallbackMode.REMOVE_FLIGHTS};
+}
+
+#callbackRemoveCampaignData {
+ text:"sammoa.label.exportApplication.callbackRemoveCampaignData";
+ value:{ExportApplicationCallbackMode.REMOVE_CAMPAIGN};
+}
+
+#callbackRemoveAllData {
+ text:"sammoa.label.exportApplication.callbackRemoveAllData";
+ value:{ExportApplicationCallbackMode.REMOVE_ALL};
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.css
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.jaxx (from rev 446, trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/sammoa/ExportApplicationUI.jaxx)
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.jaxx (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.jaxx 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,130 @@
+<!--
+ #%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%
+ -->
+<JPanel id='exportApplicationUI' layout='{new BorderLayout()}'
+ implements='fr.ulr.sammoa.ui.swing.SammoaUI<ExportApplicationUIHandler>'>
+
+ <import>
+ fr.ulr.sammoa.persistence.Campaign
+ fr.ulr.sammoa.persistence.Flight
+ fr.ulr.sammoa.ui.swing.SammoaUIContext
+
+ java.awt.BorderLayout
+ java.awt.event.ItemEvent
+ java.io.File
+
+ static org.nuiton.i18n.I18n._
+ </import>
+
+ <script><![CDATA[
+
+ public ExportApplicationUI(SammoaUIContext context) {
+ ExportApplicationUIHandler handler =
+ new ExportApplicationUIHandler(context, this);
+ setContextValue(handler);
+ handler.beforeInitUI();
+ }
+
+ protected void $afterCompleteSetup() {
+ getHandler().afterInitUI();
+ }
+ ]]></script>
+
+ <ExportApplicationUIModel id='model'
+ initializer='getContextValue(ExportApplicationUIModel.class)'/>
+
+ <ExportApplicationUIHandler id='handler'
+ initializer='getContextValue(ExportApplicationUIHandler.class)'/>
+
+ <JAXXButtonGroup id='callbacks'/>
+
+ <Table fill='both' constraints='BorderLayout.CENTER'>
+ <!-- Campaign filter -->
+ <row>
+ <cell anchor='west'>
+ <JLabel id='campaignLabel'/>
+ </cell>
+ <cell fill='horizontal' weightx='1.0' columns='2'>
+ <JComboBox id='campaignCombobox'
+ onItemStateChanged='if (ItemEvent.SELECTED == event.getStateChange()) { getModel().setSelectedCampaign((Campaign)event.getItem()); } else { getModel().setSelectedCampaign(null); }'/>
+ </cell>
+ </row>
+ <!-- Flight filter -->
+ <row>
+ <cell anchor='west'>
+ <JLabel id='flightLabel'/>
+ </cell>
+ <cell fill='horizontal' weightx='1.0' columns='2'>
+ <JComboBox id='flightCombobox'
+ onItemStateChanged='if (ItemEvent.SELECTED == event.getStateChange()) { getModel().setSelectedFlight((Flight)event.getItem()); } else { getModel().setSelectedFlight(null); }'/>
+ </cell>
+ </row>
+ <!-- export directory-->
+ <row>
+ <cell anchor='west'>
+ <JLabel id='exportDirectoryLbl'/>
+ </cell>
+ <cell weightx='1' fill="horizontal">
+ <JTextField id='exportDirectory'
+ onKeyReleased='getModel().setExportDirectory(new File(((JTextField)event.getSource()).getText()))'/>
+ </cell>
+ <cell anchor="east">
+ <JButton id="exportDirectoryFileChooseAction"
+ onActionPerformed="getHandler().chooseExportDirectory()"/>
+ </cell>
+ </row>
+ <row>
+ <cell anchor='west'>
+ <JLabel id='exportFilenameLbl'/>
+ </cell>
+ <cell fill='horizontal' weightx='1.0' columns='2'>
+ <JTextField id='exportFilename'
+ onKeyReleased='model.setExportFilename(((JTextField)event.getSource()).getText())'/>
+ </cell>
+ </row>
+ <!-- callBack -->
+ <row>
+ <cell anchor='west'>
+ <JLabel id='callbackLbl'/>
+ </cell>
+ <cell weightx='1' fill="horizontal" columns='2'>
+ <JPanel layout='{new GridLayout(0,1)}'>
+ <JRadioButton id='callbackNothing'/>
+ <JRadioButton id='callbackRemoveFlightData'/>
+ <JRadioButton id='callbackRemoveCampaignData'/>
+ <JRadioButton id='callbackRemoveAllData'/>
+ </JPanel>
+ </cell>
+ </row>
+ <!--export actions-->
+ <row>
+ <cell columns='5' fill="both">
+ <JPanel layout='{new GridLayout(1,2,0,0)}'>
+ <JButton id='quitButton' onActionPerformed='getHandler().close()'/>
+ <JButton id='exportButton'
+ onActionPerformed='getHandler().exportApplication()'/>
+ </JPanel>
+ </cell>
+ </row>
+ </Table>
+</JPanel>
\ No newline at end of file
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.jaxx
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIHandler.java (from rev 446, 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/application/ExportApplicationUIHandler.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIHandler.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,382 @@
+package fr.ulr.sammoa.ui.swing.io.output.application;
+/*
+ * #%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;
+import fr.ulr.sammoa.application.io.output.application.ExportApplicationModel;
+import fr.ulr.sammoa.application.io.output.application.ExportApplicationService;
+import fr.ulr.sammoa.persistence.Campaign;
+import fr.ulr.sammoa.persistence.Flight;
+import fr.ulr.sammoa.ui.swing.SammoaScreen;
+import fr.ulr.sammoa.ui.swing.SammoaUIContext;
+import fr.ulr.sammoa.ui.swing.SammoaUIHandler;
+import fr.ulr.sammoa.ui.swing.UIDecoratorService;
+import fr.ulr.sammoa.ui.swing.util.SammoaUtil;
+import jaxx.runtime.SwingUtil;
+import jaxx.runtime.swing.ErrorDialogUI;
+import jaxx.runtime.swing.renderer.DecoratorListCellRenderer;
+import org.nuiton.util.FileUtil;
+import org.nuiton.util.decorator.Decorator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.swing.JFrame;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Handelr of {@link ExportApplicationUI}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class ExportApplicationUIHandler implements SammoaUIHandler {
+
+ private static final Logger logger =
+ LoggerFactory.getLogger(ExportApplicationUIHandler.class);
+
+ private final ExportApplicationUI ui;
+
+ protected final SammoaUIContext context;
+
+ protected final ExportApplicationService exportService;
+
+ protected final ReferentialService referentialService;
+
+ protected final FlightService flightService;
+
+ protected final UIDecoratorService decoratorService;
+
+ public ExportApplicationUIHandler(SammoaUIContext context,
+ ExportApplicationUI ui) {
+ this.context = context;
+ this.ui = ui;
+ this.flightService = context.getService(FlightService.class);
+ this.referentialService = context.getService(ReferentialService.class);
+ this.exportService = context.getService(ExportApplicationService.class);
+ this.decoratorService = context.getService(UIDecoratorService.class);
+ }
+
+ @Override
+ public void beforeInitUI() {
+
+ //-- create model --//
+
+ ExportApplicationUIModel model = new ExportApplicationUIModel();
+
+ List<Campaign> campaigns = referentialService.getCampaigns();
+ //TODO-tchemit-2012-08-03 add an null campaign (for test purpose, should be removed...)
+ campaigns.add(0, null);
+ model.setCampaigns(campaigns);
+
+ String campaignId = context.getCampaignId();
+
+ if (campaignId != null) {
+
+ Campaign campaign = referentialService.getCampaign(campaignId);
+ model.setSelectedCampaign(campaign);
+ }
+
+ String flightId = context.getFlightId();
+
+ if (flightId != null) {
+
+ Flight flight = flightService.getFlight(flightId);
+ model.setSelectedFlight(flight);
+ }
+
+ //-- share model and handler in jaxx context --//
+ ui.setContextValue(this);
+ ui.setContextValue(model);
+
+ model.addPropertyChangeListener(new PropertyChangeListener() {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+
+ String propertyName = evt.getPropertyName();
+
+ if (ExportApplicationUIModel.PROPERTY_SELECTED_CAMPAIGN.equals(propertyName)) {
+ Campaign newValue = (Campaign) evt.getNewValue();
+ onSelectedCampaignChanged(newValue);
+ } else if (ExportApplicationUIModel.PROPERTY_FLIGHTS.equals(propertyName)) {
+ Collection<Flight> newValue = (Collection<Flight>) evt.getNewValue();
+ onFlightsChanged(newValue);
+ } else if (ExportApplicationUIModel.PROPERTY_SELECTED_FLIGHT.equals(propertyName)) {
+ Flight newValue = (Flight) evt.getNewValue();
+ onSelectedFlightChanged(newValue);
+ }
+
+ if (!ExportApplicationUIModel.PROPERTY_VALID.equals(propertyName)) {
+
+ // validate model
+ validateModel();
+ }
+ }
+ });
+ }
+
+ @Override
+ public void afterInitUI() {
+
+
+ ui.getCampaignCombobox().setRenderer(new DecoratorListCellRenderer(
+ decoratorService.getDecoratorByType(Campaign.class)));
+ ui.getFlightCombobox().setRenderer(new DecoratorListCellRenderer(
+ decoratorService.getDecoratorByType(Flight.class)));
+
+ ExportApplicationUIModel model = getModel();
+
+ File currentDirectory = FileUtil.getCurrentDirectory();
+ String absolutePath = currentDirectory.getAbsolutePath();
+ if (absolutePath.endsWith(File.separator + ".")) {
+ currentDirectory = new File(absolutePath.substring(0, absolutePath.length() - 2));
+ }
+ if (logger.isInfoEnabled()) {
+ logger.info("Current directory to use: {}", currentDirectory);
+ }
+ model.setExportDirectory(currentDirectory);
+
+ SwingUtil.fillComboBox(ui.getCampaignCombobox(),
+ model.getCampaigns(),
+ model.getSelectedCampaign());
+
+ Flight selectedFlight = model.getSelectedFlight();
+
+ onSelectedCampaignChanged(model.getSelectedCampaign());
+ onSelectedFlightChanged(selectedFlight);
+ }
+
+ @Override
+ public void onCloseUI() {
+ }
+
+ public void exportApplication() {
+
+ JFrame frame = ui.getParentContainer(JFrame.class);
+
+ try {
+ ExportApplicationModel dataModel = getModel().toModel();
+
+ boolean doExport = checkFileToExport(dataModel);
+
+ if (doExport) {
+
+ SammoaUtil.updateBusyState(frame.getRootPane(), true);
+
+ exportService.exportApplication(dataModel);
+
+ SammoaUtil.showSuccessMessage(
+ frame,
+ _("sammoa.messageDialog.sammoa.export.success",
+ dataModel.getExportFile()));
+
+ boolean removeFlightId = false;
+ boolean removeCampaingId = false;
+
+ switch (getModel().getCallback()) {
+
+ case NOTHING:
+ // nothing to do
+ break;
+ case REMOVE_FLIGHTS:
+ removeFlights(dataModel);
+ removeFlightId = true;
+ break;
+ case REMOVE_CAMPAIGN:
+ removeCampaign(dataModel);
+ removeCampaingId = true;
+ break;
+ case REMOVE_ALL:
+ removeAllData();
+ removeCampaingId = true;
+ break;
+
+ }
+
+ if (removeCampaingId) {
+ context.setCampaignId(null);
+ removeFlightId = true;
+ }
+
+ if (removeFlightId) {
+ context.setFlightId(null);
+ }
+ close();
+ }
+
+ } catch (Exception e) {
+ ErrorDialogUI.showError(e);
+ } finally {
+ SammoaUtil.updateBusyState(frame.getRootPane(), false);
+ }
+ }
+
+ 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 {}: {}",
+ campaignId, flightIds);
+ }
+
+ for (String flightId : flightIds) {
+ flightService.deleteFlight(campaignId, flightId);
+ }
+ }
+
+ protected void removeCampaign(ExportApplicationModel model) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Will remove campaign data {}", model.getCampaignId());
+ }
+
+ referentialService.deleteCampaign(model.getCampaignId());
+ }
+
+ protected void removeAllData() {
+ if (logger.isInfoEnabled()) {
+ logger.info("Will remove all data from current db (create a new db...)");
+ }
+
+ referentialService.deleteAllData();
+ }
+
+ protected void validateModel() {
+ boolean valid = true;
+
+ ExportApplicationUIModel model = getModel();
+
+ if (model.getSelectedCampaign() == null) {
+
+ // no campaign selected
+ valid = false;
+ } else {
+
+ if (model.getExportDirectory() == null ||
+ !model.getExportDirectory().exists()) {
+
+ // export directory does not exists
+ valid = false;
+ }
+ }
+
+ model.setValid(valid);
+ }
+
+ protected boolean checkFileToExport(ExportApplicationModel dataModel) {
+ boolean doExport = true;
+
+ if (dataModel.getExportFile().exists()) {
+ doExport = SammoaUtil.askQuestion(
+ ui,
+ _("sammoa.messageDialog.sammoa.exportFile.alreadyExists",
+ dataModel.getExportFile()));
+ }
+ return doExport;
+ }
+
+ public void close() {
+ context.changeScreen(SammoaScreen.HOME);
+ }
+
+ public void chooseExportDirectory() {
+ File f = SammoaUtil.chooseDirectory(
+ ui,
+ _("sammoa.title.choose.export.directory"),
+ _("sammoa.action.choose.export.directory"),
+ ui.getModel().getExportDirectory()
+ );
+ ui.getModel().setExportDirectory(f);
+ }
+
+
+ protected ExportApplicationUIModel getModel() {
+ return ui.getModel();
+ }
+
+ protected void onSelectedCampaignChanged(Campaign newCampaign) {
+
+ // reset flights,...
+ if (logger.isInfoEnabled()) {
+ Decorator<Campaign> decorator =
+ decoratorService.getDecoratorByType(Campaign.class);
+ logger.info("New selected campain: {}",
+ decorator.toString(newCampaign));
+ }
+
+ ExportApplicationUIModel model = getModel();
+
+ List<Flight> flights;
+ String filename;
+ if (newCampaign == null) {
+ flights = Collections.emptyList();
+ filename = "";
+ } else {
+ flights = flightService.getFlights(newCampaign);
+ // add a null value to unselect flights
+ flights.add(0, null);
+ filename = String.format("campaign-%s.sammoa", newCampaign.getCode());
+ }
+ if (logger.isDebugEnabled()) {
+ logger.debug("New flights: {}", flights.size());
+ logger.debug("New filename: {}", filename);
+ }
+ model.setFlights(flights);
+ model.setExportFilename(filename);
+ }
+
+ protected void onFlightsChanged(Collection<Flight> flights) {
+
+ ExportApplicationUIModel model = getModel();
+ Flight selectedFlight = model.getSelectedFlight();
+ if (flights.contains(selectedFlight)) {
+ model.setSelectedFlight(null);
+ }
+
+ SwingUtil.fillComboBox(ui.getFlightCombobox(),
+ flights,
+ selectedFlight);
+ }
+
+ protected void onSelectedFlightChanged(Flight newCampaign) {
+
+ // reset flights,...
+ if (logger.isInfoEnabled()) {
+ Decorator<Flight> decorator =
+ decoratorService.getDecoratorByType(Flight.class);
+ logger.info("New selected flight: {}",
+ decorator.toString(newCampaign));
+ }
+
+ ExportApplicationUIModel model = getModel();
+ }
+
+
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIHandler.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIModel.java (from rev 446, 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/application/ExportApplicationUIModel.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIModel.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,189 @@
+package fr.ulr.sammoa.ui.swing.io.output.application;
+/*
+ * #%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 com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import fr.ulr.sammoa.application.io.output.application.ExportApplicationModel;
+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;
+import java.util.Set;
+
+/**
+ * Model of export application UI.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.6
+ */
+public class ExportApplicationUIModel extends AbstractSerializableBean {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String PROPERTY_CAMPAIGNS = "campaigns";
+
+ public static final String PROPERTY_SELECTED_CAMPAIGN = "selectedCampaign";
+
+ public static final String PROPERTY_FLIGHTS = "flights";
+
+ public static final String PROPERTY_SELECTED_FLIGHT = "selectedFlight";
+
+ public static final String PROPERTY_EXPORT_DIRECTORY = "exportDirectory";
+
+ public static final String PROPERTY_EXPORT_FILENAME = "exportFilename";
+
+ public static final String PROPERTY_CALLBACK = "callback";
+
+ public static final String PROPERTY_VALID = "valid";
+
+ protected List<Campaign> campaigns;
+
+ protected Campaign selectedCampaign;
+
+ protected List<Flight> flights;
+
+ protected Flight selectedFlight;
+
+ protected File exportDirectory;
+
+ protected String exportFilename;
+
+ protected ExportApplicationCallbackMode callback;
+
+ protected boolean valid;
+
+ public File getExportDirectory() {
+ return exportDirectory;
+ }
+
+ public void setExportDirectory(File exportDirectory) {
+ File oldValue = this.exportDirectory;
+ this.exportDirectory = exportDirectory;
+ firePropertyChange(PROPERTY_EXPORT_DIRECTORY, oldValue, exportDirectory);
+ }
+
+ public String getExportFilename() {
+ return exportFilename;
+ }
+
+ public void setExportFilename(String exportFilename) {
+ String oldValue = this.exportFilename;
+ this.exportFilename = exportFilename;
+ firePropertyChange(PROPERTY_EXPORT_FILENAME, oldValue, exportFilename);
+ }
+
+ public List<Campaign> getCampaigns() {
+ if (campaigns == null) {
+ campaigns = Lists.newArrayList();
+ }
+ return campaigns;
+ }
+
+ public void setCampaigns(List<Campaign> campaigns) {
+ List<Campaign> oldValue = this.campaigns;
+ this.campaigns = campaigns;
+ firePropertyChange(PROPERTY_CAMPAIGNS, oldValue, campaigns);
+ }
+
+ public Campaign getSelectedCampaign() {
+ return selectedCampaign;
+ }
+
+ public void setSelectedCampaign(Campaign selectedCampaign) {
+ Campaign oldValue = this.selectedCampaign;
+ this.selectedCampaign = selectedCampaign;
+ firePropertyChange(PROPERTY_SELECTED_CAMPAIGN, oldValue, selectedCampaign);
+ }
+
+ public List<Flight> getFlights() {
+ if (flights == null) {
+ flights = Lists.newArrayList();
+ }
+ return flights;
+ }
+
+ public void setFlights(List<Flight> flights) {
+ List<Flight> oldValue = this.flights;
+ this.flights = flights;
+ firePropertyChange(PROPERTY_FLIGHTS, oldValue, flights);
+ }
+
+ public Flight getSelectedFlight() {
+ return selectedFlight;
+ }
+
+ public void setSelectedFlight(Flight selectedFlight) {
+ Flight oldValue = this.selectedFlight;
+ this.selectedFlight = selectedFlight;
+ firePropertyChange(PROPERTY_SELECTED_FLIGHT, oldValue, selectedFlight);
+ }
+
+ public ExportApplicationCallbackMode getCallback() {
+ return callback;
+ }
+
+ public void setCallback(ExportApplicationCallbackMode callback) {
+ ExportApplicationCallbackMode oldValue = this.callback;
+ this.callback = callback;
+ firePropertyChange(PROPERTY_CALLBACK, oldValue, callback);
+ }
+
+ public boolean isValid() {
+ return valid;
+ }
+
+ public void setValid(boolean valid) {
+ boolean oldValue = this.valid;
+ this.valid = valid;
+ firePropertyChange(PROPERTY_VALID, oldValue, valid);
+ }
+
+ public ExportApplicationModel toModel() {
+
+ Set<Flight> flightsToExport;
+
+ if (getSelectedFlight() == null) {
+
+ // all flights of this campaign
+ flightsToExport = Sets.newHashSet(getFlights());
+ // remove the null value
+ flightsToExport.remove(null);
+ } else {
+
+ // only one flight to export
+ flightsToExport = Sets.newHashSet(getSelectedFlight());
+ }
+ ExportApplicationModel result = ExportApplicationModel.newModel(
+ new File(getExportDirectory(), getExportFilename()),
+ getSelectedCampaign().getTopiaId(),
+ Iterables.transform(flightsToExport, TopiaId.GET_TOPIA_ID)
+ );
+ return result;
+ }
+}
\ No newline at end of file
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIModel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java 2012-08-20 14:27:46 UTC (rev 449)
@@ -0,0 +1,6 @@
+/**
+ * Package for export application to a {@code sammoa} file.
+ *
+ * @since 0.6
+ */
+package fr.ulr.sammoa.ui.swing.io.output.application;
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/java-info.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
1
0
r448 - trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing
by tchemit@users.forge.codelutin.com 20 Aug '12
by tchemit@users.forge.codelutin.com 20 Aug '12
20 Aug '12
Author: tchemit
Date: 2012-08-20 16:18:24 +0200 (Mon, 20 Aug 2012)
New Revision: 448
Url: http://forge.codelutin.com/repositories/revision/sammoa/448
Log:
deprecate flightUIHandler from SammoaUIContext
Modified:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java 2012-08-20 14:15:33 UTC (rev 447)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaUIContext.java 2012-08-20 14:18:24 UTC (rev 448)
@@ -46,6 +46,7 @@
protected MainUIHandler mainUIHandler;
+ @Deprecated
protected FlightUIHandler flightUIHandler;
protected SwingSession swingSession;
@@ -95,10 +96,12 @@
this.mainUIHandler = mainUIHandler;
}
+ @Deprecated
public FlightUIHandler getFlightUIHandler() {
return flightUIHandler;
}
+ @Deprecated
public void setFlightUIHandler(FlightUIHandler flightUIHandler) {
this.flightUIHandler = flightUIHandler;
}
1
0
r447 - in trunk/sammoa-ui-swing/src/main/resources/fr/ulr/sammoa: persistence ui/swing/transect
by tchemit@users.forge.codelutin.com 20 Aug '12
by tchemit@users.forge.codelutin.com 20 Aug '12
20 Aug '12
Author: tchemit
Date: 2012-08-20 16:15:33 +0200 (Mon, 20 Aug 2012)
New Revision: 447
Url: http://forge.codelutin.com/repositories/revision/sammoa/447
Log:
fix validation i18n messages
Modified:
trunk/sammoa-ui-swing/src/main/resources/fr/ulr/sammoa/persistence/Observation-warning-validation.xml
trunk/sammoa-ui-swing/src/main/resources/fr/ulr/sammoa/ui/swing/transect/TransectUIModel-error-validation.xml
Modified: trunk/sammoa-ui-swing/src/main/resources/fr/ulr/sammoa/persistence/Observation-warning-validation.xml
===================================================================
--- trunk/sammoa-ui-swing/src/main/resources/fr/ulr/sammoa/persistence/Observation-warning-validation.xml 2012-08-20 14:10:50 UTC (rev 446)
+++ trunk/sammoa-ui-swing/src/main/resources/fr/ulr/sammoa/persistence/Observation-warning-validation.xml 2012-08-20 14:15:33 UTC (rev 447)
@@ -50,7 +50,7 @@
<param name="useSensitiveContext">true</param>
<param name="expression">
<![CDATA[ species.code == current.code ]]></param>
- <message>sammoa.validator.observation.unknown.species##${code}</message>
+ <message>sammoa.validator.observation.unknown.species##${species.code}</message>
</field-validator>
</field>
Modified: trunk/sammoa-ui-swing/src/main/resources/fr/ulr/sammoa/ui/swing/transect/TransectUIModel-error-validation.xml
===================================================================
--- trunk/sammoa-ui-swing/src/main/resources/fr/ulr/sammoa/ui/swing/transect/TransectUIModel-error-validation.xml 2012-08-20 14:10:50 UTC (rev 446)
+++ trunk/sammoa-ui-swing/src/main/resources/fr/ulr/sammoa/ui/swing/transect/TransectUIModel-error-validation.xml 2012-08-20 14:15:33 UTC (rev 447)
@@ -49,7 +49,7 @@
<param name="keys">name</param>
<param name="againstMe">true</param>
<param name="nullValueSkipped">true</param>
- <message>sammoa.validator.transect.uniqueKey##name</message>
+ <message>sammoa.validator.transect.uniqueKey##${name}</message>
</field-validator>
</field>
1
0
r446 - trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps
by fdesbois@users.forge.codelutin.com 20 Aug '12
by fdesbois@users.forge.codelutin.com 20 Aug '12
20 Aug '12
Author: fdesbois
Date: 2012-08-20 16:10:50 +0200 (Mon, 20 Aug 2012)
New Revision: 446
Url: http://forge.codelutin.com/repositories/revision/sammoa/446
Log:
resolve NPE in FakeGpsHandler
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/FakeGpsHandler.java
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-20 14:10:36 UTC (rev 445)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-20 14:10:50 UTC (rev 446)
@@ -209,7 +209,9 @@
boolean sameLocation = GeoPoints.equal(location, lastLocation);
- logger.debug("sameLocation={} [{} :: {}]", new Object[]{sameLocation, location, lastLocation});
+ if (logger.isTraceEnabled()) {
+ logger.trace("sameLocation={} [{} :: {}]", new Object[]{sameLocation, location, lastLocation});
+ }
// reset nbFailures if location hasn't changed
if (sameLocation) {
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java 2012-08-20 14:10:36 UTC (rev 445)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java 2012-08-20 14:10:50 UTC (rev 446)
@@ -28,6 +28,7 @@
import fr.ulr.sammoa.application.device.DeviceTechnicalException;
import fr.ulr.sammoa.persistence.GeoPoint;
import fr.ulr.sammoa.persistence.GeoPointImpl;
+import fr.ulr.sammoa.persistence.GeoPoints;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -132,7 +133,8 @@
GeoPoint result;
// Location already saved, return null (i.e. no new location)
if (currentLocation == null || currentLocation.getTopiaId() != null) {
- result = null;
+ result = new GeoPointImpl(GeoPoints.EMPTY_COORDINATE, GeoPoints.EMPTY_COORDINATE);
+ currentLocation.setRecordTime(new Date());
} else {
result = currentLocation;
1
0