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
August 2012
- 4 participants
- 171 discussions
r490 - trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio
by bpoussin@users.forge.codelutin.com 29 Aug '12
by bpoussin@users.forge.codelutin.com 29 Aug '12
29 Aug '12
Author: bpoussin
Date: 2012-08-29 16:38:16 +0200 (Wed, 29 Aug 2012)
New Revision: 490
Url: http://forge.codelutin.com/repositories/revision/sammoa/490
Log:
Ajout d'un nouveau recorder qui fonctionne :)
Il reste a mettre en configuration quelques variables pour pouvoir
l'instancier avec les bonnes valeurs (ce que veut l'utilisateur)
Il faut aussi ajouter une meilleur compression
Added:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioRecorder.java
Copied: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioRecorder.java (from rev 479, trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderDefault.java)
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioRecorder.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioRecorder.java 2012-08-29 14:38:16 UTC (rev 490)
@@ -0,0 +1,228 @@
+/*
+ * #%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%
+ */
+package fr.ulr.sammoa.application.device.audio;
+
+import com.google.common.base.Preconditions;
+import fr.ulr.sammoa.application.device.DeviceState;
+import fr.ulr.sammoa.application.device.DeviceStateEvent;
+import fr.ulr.sammoa.application.device.DeviceStateListener;
+import fr.ulr.sammoa.application.device.DeviceTechnicalException;
+import java.io.File;
+import java.util.Set;
+import java.util.Timer;
+import java.util.TimerTask;
+import javax.sound.sampled.AudioFileFormat;
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.DataLine;
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.TargetDataLine;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Created: 16/05/12
+ *
+ * @author fdesbois <desbois(a)codelutin.com>
+ */
+public class SammoaAudioRecorder implements AudioRecorder {
+
+ private static final Logger log = LoggerFactory.getLogger(SammoaAudioRecorder.class);
+
+ protected AudioFormat audioFormat;
+
+ protected AudioFileFormat.Type outputType = AudioFileFormat.Type.WAVE;
+
+ protected DeviceState state;
+
+ protected Set<DeviceStateListener> listeners;
+
+ protected AudioRecorderThread currentRecorder;
+
+ public SammoaAudioRecorder(
+ float sampleRate, // 8000,11025,16000,22050,44100
+ int sampleSizeInBits // 8,16
+ ) {
+ int channels = 1; // 1,2
+ boolean signed = true; //true,false
+ boolean bigEndian = false; //true,false
+
+ audioFormat = new AudioFormat(
+ sampleRate,
+ sampleSizeInBits,
+ channels,
+ signed,
+ bigEndian);
+ }
+
+ @Override
+ public DeviceState getState() {
+ DeviceState result;
+ if (currentRecorder == null) {
+ result = DeviceState.READY;
+ } else {
+ result = DeviceState.RUNNING;
+ }
+ return result;
+ }
+
+ public void setState(DeviceState state, DeviceTechnicalException error) {
+ DeviceState oldValue = getState();
+ this.state = state;
+
+ // Fire on listeners
+ DeviceStateEvent event = new DeviceStateEvent(this, oldValue, state);
+ event.setError(error);
+ for (DeviceStateListener listener : listeners) {
+ listener.stateChanged(event);
+ }
+ }
+
+ @Override
+ public AudioFileFormat.Type getOutputType() {
+ return outputType;
+ }
+
+ @Override
+ public void addDeviceStateListener(DeviceStateListener listener) {
+ listeners.add(listener);
+ }
+
+ @Override
+ public void removeDeviceStateListener(DeviceStateListener listener) {
+ listeners.remove(listener);
+ }
+
+ @Override
+ public Set<DeviceStateListener> getDeviceStateListeners() {
+ return listeners;
+ }
+
+ @Override
+ public void open() throws DeviceTechnicalException {
+ // rien a faire
+ }
+
+ @Override
+ public void start() {
+ // rien a faire
+ }
+
+ @Override
+ public void record(File outputFile, long delaySeconds) {
+ Preconditions.checkArgument(outputFile != null);
+
+ try {
+ // stop last started if necessary
+ stop();
+ // start new recorder thread
+ currentRecorder = new AudioRecorderThread(
+ audioFormat, outputType, outputFile, delaySeconds);
+ currentRecorder.start();
+ } catch (Exception eee) {
+ eee.printStackTrace();
+ log.error("Can't record audio", eee);
+ }
+ }
+
+ @Override
+ public void stopRecord(long delaySeconds) {
+ stop();
+ }
+
+ @Override
+ public void stop() {
+ if (currentRecorder != null) {
+ currentRecorder.stopRecord();
+ currentRecorder = null;
+ }
+ }
+
+ @Override
+ public void close() throws DeviceTechnicalException {
+ stop();
+ }
+
+ static protected class AudioRecorderThread extends Thread{
+ protected TargetDataLine targetDataLine;
+ protected AudioFileFormat.Type fileType;
+ protected File filename;
+ protected long delayToClose;
+ protected AudioInputStream stream;
+
+ public AudioRecorderThread(
+ AudioFormat audioFormat, AudioFileFormat.Type fileType,
+ File filename, long delayToClose) throws LineUnavailableException {
+ this.fileType = fileType;
+ this.filename = filename;
+ this.delayToClose = delayToClose;
+
+
+ DataLine.Info dataLineInfo = new DataLine.Info(
+ TargetDataLine.class, audioFormat);
+
+ targetDataLine = (TargetDataLine)
+ AudioSystem.getLine(dataLineInfo);
+
+ AudioFormat.Encoding targetEncoding = AudioFormat.Encoding.ULAW;
+ targetDataLine.open(audioFormat);
+ targetDataLine.start();
+ stream = new AudioInputStream(targetDataLine);
+ stream = AudioSystem.getAudioInputStream(targetEncoding, stream);
+
+ }
+
+ /**
+ * Arrete l'enregistrement N seconde apres la demande, N etant
+ * le parametre delayToClose passer lors de la construction du thread
+ */
+ public void stopRecord() {
+ System.out.println("Arret demande ...");
+ Timer timer = new Timer();
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ targetDataLine.stop();
+ targetDataLine.close();
+ System.out.println("... arret reel");
+ }
+ }, delayToClose * 1000);
+ }
+
+ @Override
+ public void run(){
+ try{
+ System.out.println("Write audio to: " + filename);
+ log.debug("Write audio to: " + filename);
+ AudioSystem.write(stream, fileType, filename);
+ }catch (Exception eee) {
+ eee.printStackTrace();
+ log.error("Can't record audio", eee);
+ }
+
+ }
+ }
+}
1
0
r489 - in trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output: application map
by tchemit@users.forge.codelutin.com 29 Aug '12
by tchemit@users.forge.codelutin.com 29 Aug '12
29 Aug '12
Author: tchemit
Date: 2012-08-29 13:58:57 +0200 (Wed, 29 Aug 2012)
New Revision: 489
Url: http://forge.codelutin.com/repositories/revision/sammoa/489
Log:
fixes #1425: Nom des fichiers ?\195?\160 l'export
Modified:
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/map/ExportMapUIHandler.java
Modified: 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/ExportApplicationUIHandler.java 2012-08-29 11:58:12 UTC (rev 488)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIHandler.java 2012-08-29 11:58:57 UTC (rev 489)
@@ -413,7 +413,8 @@
flights = flightService.getFlights(newCampaign);
// add a null value to unselect flights
flights.add(0, null);
- filename = String.format("campaign-%s.sammoa", newCampaign.getCode());
+ filename = String.format("campaign-%1$s_%2$tY_%2$tm_%2$td.sammoa",
+ newCampaign.getCode(), new Date());
}
if (logger.isDebugEnabled()) {
logger.debug("New flights: {}", flights.size());
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIHandler.java 2012-08-29 11:58:12 UTC (rev 488)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/map/ExportMapUIHandler.java 2012-08-29 11:58:57 UTC (rev 489)
@@ -63,6 +63,7 @@
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.Collections;
+import java.util.Date;
import java.util.List;
import static org.nuiton.i18n.I18n._;
@@ -153,9 +154,10 @@
ExportMapUIModel model = getModel();
- model.setExportEffortsFilename("Efforts");
- model.setExportObservationsFilename("Observations");
- model.setExportGeoPointsFilename("GeoPoints");
+ String suffix = String.format("_%1$tY_%1$tm_%1$td", new Date());
+ model.setExportEffortsFilename("Efforts" + suffix);
+ model.setExportObservationsFilename("Observations" + suffix);
+ model.setExportGeoPointsFilename("GeoPoints" + suffix);
File currentDirectory = FileUtil.getCurrentDirectory();
String absolutePath = currentDirectory.getAbsolutePath();
1
0
Author: tchemit
Date: 2012-08-29 13:58:12 +0200 (Wed, 29 Aug 2012)
New Revision: 488
Url: http://forge.codelutin.com/repositories/revision/sammoa/488
Log:
fix license-m-p config
Modified:
trunk/sammoa-ui-swing/pom.xml
Modified: trunk/sammoa-ui-swing/pom.xml
===================================================================
--- trunk/sammoa-ui-swing/pom.xml 2012-08-29 11:57:44 UTC (rev 487)
+++ trunk/sammoa-ui-swing/pom.xml 2012-08-29 11:58:12 UTC (rev 488)
@@ -294,8 +294,7 @@
<configuration>
<licenseMerges>
<licenseMerge>
- The Apache Software License, Version 2.0|Apache License,
- Version 2.0
+ The Apache Software License, Version 2.0|Apache License, Version 2.0
</licenseMerge>
<licenseMerge>BSD License|BSD</licenseMerge>
</licenseMerges>
1
0
r487 - trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io
by tchemit@users.forge.codelutin.com 29 Aug '12
by tchemit@users.forge.codelutin.com 29 Aug '12
29 Aug '12
Author: tchemit
Date: 2012-08-29 13:57:44 +0200 (Wed, 29 Aug 2012)
New Revision: 487
Url: http://forge.codelutin.com/repositories/revision/sammoa/487
Log:
fix jaxx compil
Modified:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/AbstractApplicationModelWithBackup.java
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/AbstractApplicationModelWithBackup.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/AbstractApplicationModelWithBackup.java 2012-08-29 11:25:54 UTC (rev 486)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/AbstractApplicationModelWithBackup.java 2012-08-29 11:57:44 UTC (rev 487)
@@ -24,15 +24,14 @@
* #L%
*/
-import org.jdesktop.beans.AbstractSerializableBean;
-
/**
* Abstract model which support backup configuration.
*
+ * <strong>Note:</strong> Do not remove explicit fqn of super-classe otherwise jaxx does not complie :(
* @author tchemit <chemit(a)codelutin.com>
* @since 0.7
*/
-public abstract class AbstractApplicationModelWithBackup extends AbstractSerializableBean {
+public abstract class AbstractApplicationModelWithBackup extends org.jdesktop.beans.AbstractSerializableBean {
private static final long serialVersionUID = 1L;
1
0
29 Aug '12
Author: tchemit
Date: 2012-08-29 13:25:54 +0200 (Wed, 29 Aug 2012)
New Revision: 486
Url: http://forge.codelutin.com/repositories/revision/sammoa/486
Log:
fixes #1413: Backup des donn?\195?\169es avant suppression
reusinage des repertoire (on laisse dans la configuration uniquement ce qui est configurable)
Added:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaDirectories.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/BackupService.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/AbstractApplicationModelWithBackup.java
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.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/input/application/ImportApplicationService.java
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java
trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties
trunk/sammoa-ui-swing/src/main/filters/sammoa.properties
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/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/resources/i18n/sammoa-ui-swing_en_GB.properties
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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/ReferentialService.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -51,6 +51,7 @@
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.TopiaRuntimeException;
+import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
@@ -264,9 +265,12 @@
if (createCampaign) {
+ File dataDirectory = config.getDataDirectory();
+
// creates the campaign storage
SammoaStorages.createCampaignStorage(
- config.getCampaignDirectory(), result);
+ SammoaDirectories.getCampaignDirectory(dataDirectory),
+ result);
}
return result;
@@ -474,7 +478,6 @@
}
-
public void deleteAllData() {
Iterable<String> campaignIds;
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -29,10 +29,10 @@
import com.google.common.base.Throwables;
import fr.ulr.sammoa.application.device.gps.GpsConfig;
import fr.ulr.sammoa.persistence.AutoSaveListener;
+import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.nuiton.util.ApplicationConfig;
import org.nuiton.util.ArgumentsParserException;
-import org.nuiton.util.FileUtil;
import org.nuiton.util.Version;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -105,12 +105,33 @@
gpsConfig = new GpsConfig(applicationConfig);
- // create directory if needed
- getOrCreateDirectory(SammoaConfigOption.DATA_DIRECTORY);
+ try {
+ prepareDirectories();
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
+ }
logger.debug("parsed options in config file {}", applicationConfig.getOptions());
}
+ protected void prepareDirectories() throws IOException {
+
+ getOrCreateDirectory(SammoaConfigOption.DATA_DIRECTORY);
+ File tmpDir = getOrCreateDirectory(SammoaConfigOption.TMP_DIRECTORY);
+ // clean it
+ FileUtils.deleteDirectory(tmpDir);
+
+ FileUtils.forceMkdir(tmpDir);
+
+ FileUtils.forceMkdir(SammoaDirectories.getBackupDirectory(getDataDirectory()));
+ FileUtils.forceMkdir(SammoaDirectories.getCampaignDirectory(getDataDirectory()));
+ File dbDirectory = SammoaDirectories.getDbDirectory(getDataDirectory());
+ FileUtils.forceMkdir(dbDirectory);
+
+ // inject in defaults (we don't want anybody to change this
+ applicationConfig.setDefaultOption("db.directory", dbDirectory.getAbsolutePath());
+ }
+
@Override
public ApplicationConfig get() {
return applicationConfig;
@@ -133,36 +154,6 @@
return ReflectionToStringBuilder.toString(this);
}
-// public Properties getProperties() {
-// Properties result = applicationConfig.getFlatOptions();
-// return result;
-// }
-//
-// public File getDataDirectory() {
-// File file = applicationConfig.getOptionAsFile(SammoaConfigOption.DATA_DIRECTORY.key);
-// Preconditions.checkNotNull(file);
-// return file;
-// }
-//
-// public String getUIConfigFileName() {
-// String filePath = applicationConfig.getOption(SammoaConfigOption.UI_CONFIG_FILE.key);
-// return filePath;
-// }
-
-// public Version getApplicationVersion() {
-// String versionStr = applicationConfig.getOption(SammoaConfigOption.VERSION.key);
-// String s = VersionUtil.removeSnapshot(versionStr);
-// Version v = VersionUtil.valueOf(s);
-// Preconditions.checkNotNull(v);
-// return v;
-// }
-//
-// public URL getApplicationSite() {
-// URL url = applicationConfig.getOptionAsURL(SammoaConfigOption.SITE_URL.key);
-// Preconditions.checkNotNull(url);
-// return url;
-// }
-
/** @return {@link SammoaConfigOption#LOG_FILE} value */
public File getLogFile() {
return applicationConfig.getOptionAsFile(SammoaConfigOption.LOG_FILE.key);
@@ -204,16 +195,22 @@
/** @return {@link SammoaConfigOption#DATA_DIRECTORY} value */
public File getDataDirectory() {
- File result = getOrCreateDirectory(SammoaConfigOption.DATA_DIRECTORY);
+ File result = applicationConfig.getOptionAsFile(SammoaConfigOption.DATA_DIRECTORY.key);
return result;
}
-// /** @return {@link SammoaConfigOption#AUDIO_DIRECTORY} value */
-// public File getAudioDirectory() {
-// File result = getOrCreateDirectory(SammoaConfigOption.AUDIO_DIRECTORY);
-// return result;
-// }
+ public File getTmpDirectory() {
+ File result = applicationConfig.getOptionAsFile(SammoaConfigOption.TMP_DIRECTORY.key);
+ return result;
+ }
+ public char getCsvSeparator() {
+ char csvSeparator = applicationConfig.getOption(
+ char.class, SammoaConfigOption.CSV_SEPARATOR.key);
+ Preconditions.checkNotNull(csvSeparator);
+ return csvSeparator;
+ }
+
/** @return {@link SammoaConfigOption#SYSTEM_ID} value */
public String getSystemId() {
String result = applicationConfig.getOption(SammoaConfigOption.SYSTEM_ID.key);
@@ -229,35 +226,9 @@
/** @return {@link SammoaConfigOption#BACKGROUND_SHAPE_FILE} value */
public File getBackgroundShapeFile() {
File result = applicationConfig.getOptionAsFile(SammoaConfigOption.BACKGROUND_SHAPE_FILE.key);
-// Preconditions.checkArgument(result.exists(), "File " + result.getAbsolutePath() + " doesn't exist");
return result;
}
-// /**
-// * @return {@link SammoaConfigOption#TRANSECT_SHAPE_FILE} value
-// */
-// public File getTransectShapeFile() {
-// File result = applicationConfig.getOptionAsFile(SammoaConfigOption.TRANSECT_SHAPE_FILE.key);
-//// Preconditions.checkArgument(result.exists(), "File " + result.getAbsolutePath() + " doesn't exist");
-// return result;
-// }
-//
-// /**
-// * @return {@link SammoaConfigOption#STRATE_SHAPE_FILE} value
-// */
-// public File getStrateShapeFile() {
-// File result = applicationConfig.getOptionAsFile(SammoaConfigOption.STRATE_SHAPE_FILE.key);
-//// Preconditions.checkArgument(result.exists(), "File " + result.getAbsolutePath() + " doesn't exist");
-// return result;
-// }
-//
-// /**
-// * @param backgroundShapeFile {@link SammoaConfigOption#BACKGROUND_SHAPE_FILE} value
-// */
-// public void setBackgroundShapeFile(File backgroundShapeFile) {
-// applicationConfig.setOption(SammoaConfigOption.BACKGROUND_SHAPE_FILE.key, String.valueOf(mapBaseShapeFile));
-// }
-
/** @return {@link SammoaConfigOption#AUTO_COMMIT_DELAY} value */
public Long getAutoCommitDelay() {
long result = applicationConfig.getOptionAsLong(SammoaConfigOption.AUTO_COMMIT_DELAY.key);
@@ -294,7 +265,7 @@
* the directory to create
* @return the created directory
*/
- protected File getOrCreateDirectory(SammoaConfigOption option) {
+ protected File getOrCreateDirectory(SammoaConfigOption option) throws IOException {
File directory = applicationConfig.getOptionAsFile(option.getKey());
@@ -307,32 +278,11 @@
logger.debug("{} = {}", option, directory);
- try {
- FileUtil.createDirectoryIfNecessary(directory);
+ FileUtils.forceMkdir(directory);
- } catch (IOException e) {
- throw Throwables.propagate(e);
- }
return directory;
}
- public File getCampaignDirectory() {
- File result = getOrCreateDirectory(SammoaConfigOption.CAMPAIGN_DIRECTORY);
- return result;
- }
-
- public File getTmpDirectory() {
- File result = getOrCreateDirectory(SammoaConfigOption.TMP_DIRECTORY);
- return result;
- }
-
- public char getCsvSeparator() {
- char csvSeparator = applicationConfig.getOption(
- char.class, SammoaConfigOption.CSV_SEPARATOR.key);
- Preconditions.checkNotNull(csvSeparator);
- return csvSeparator;
- }
-
/**
* All Sammoa configuration options.
*
@@ -347,11 +297,6 @@
"${user.home}/.sammoa",
File.class
),
- CAMPAIGN_DIRECTORY("campaign.directory",
- n_("sammoa.config.campaign.directory"),
- "${data.directory}/campaign",
- File.class
- ),
TMP_DIRECTORY("tmp.directory",
n_("sammoa.config.tmp.directory"),
"${java.io.tmpdir}/sammoa",
Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaDirectories.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaDirectories.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaDirectories.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -0,0 +1,74 @@
+package fr.ulr.sammoa.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%
+ */
+
+import java.io.File;
+
+/**
+ * Helper about directories used in Sammoa.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.7
+ */
+public class SammoaDirectories {
+
+ protected SammoaDirectories() {
+ // no constructor
+ }
+
+ public static File getBackupFile(File container, String filename) {
+ return new File(getBackupDirectory(container), filename);
+ }
+
+ public static File getBackupDirectory(File container) {
+ return new File(container, "backup");
+ }
+
+ public static File getCampaignDirectory(File container) {
+ return new File(container, "campaign");
+ }
+
+ public static File getDbDirectory(File container) {
+ return new File(container, "db");
+ }
+
+ public static File getCsvDirectory(File container) {
+ return new File(container, "csv");
+ }
+
+ public static File getAudioDirectory(File container) {
+ return new File(container, "audio");
+ }
+
+ public static File getFlightDirectory(File container) {
+ return new File(container, "flight");
+ }
+
+ public static File getMapDirectory(File container) {
+ return new File(container, "map");
+ }
+
+}
+
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaDirectories.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.java 2012-08-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaServiceSupport.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -26,7 +26,9 @@
import fr.ulr.sammoa.application.io.CampaignStorage;
import fr.ulr.sammoa.application.io.SammoaStorages;
import fr.ulr.sammoa.persistence.SammoaPersistence;
+import org.apache.commons.io.FileUtils;
import org.nuiton.topia.TopiaContext;
+import org.nuiton.util.ZipUtil;
import java.io.File;
import java.io.IOException;
@@ -63,7 +65,8 @@
}
public CampaignStorage getCampaignStorage(String campaignId) {
- File directory = config.getCampaignDirectory();
+ File dataDirectory = config.getDataDirectory();
+ File directory = SammoaDirectories.getCampaignDirectory(dataDirectory);
CampaignStorage campaignStorage = SammoaStorages.getCampaignStorage(
directory, campaignId);
return campaignStorage;
@@ -82,4 +85,20 @@
public void close() throws IOException {
// by default nothing to close
}
+
+ protected void compressZipFile(File zipFile, File directory) {
+
+ try {
+ FileUtils.forceMkdir(zipFile.getParentFile());
+
+ try {
+ ZipUtil.compress(zipFile, directory);
+ } finally {
+ FileUtils.deleteDirectory(directory);
+
+ }
+ } catch (IOException e) {
+ throw new SammoaTechnicalException("Could not compress directory", e);
+ }
+ }
}
Added: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/BackupService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/BackupService.java (rev 0)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/BackupService.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -0,0 +1,101 @@
+package fr.ulr.sammoa.application.io;
+
+/*
+ * #%L
+ * SAMMOA :: Application
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import com.google.common.base.Preconditions;
+import fr.ulr.sammoa.application.SammoaDirectories;
+import fr.ulr.sammoa.application.SammoaServiceSupport;
+import fr.ulr.sammoa.application.SammoaTechnicalException;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.filefilter.DirectoryFileFilter;
+import org.apache.commons.io.filefilter.OrFileFilter;
+import org.apache.commons.io.filefilter.SuffixFileFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Service to backup (or/and later restore) sammoa.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.7
+ */
+public class BackupService extends SammoaServiceSupport {
+
+ /** Logger. */
+ private static final Logger logger =
+ LoggerFactory.getLogger(BackupService.class);
+
+ protected static final OrFileFilter DB_FILTER =
+ new OrFileFilter(DirectoryFileFilter.INSTANCE,
+ new SuffixFileFilter(".h2.db"));
+
+ /**
+ * Export all the application data to the backup directory.
+ *
+ * @param backupFilename filename of the backup file
+ * @since 0.7
+ */
+ public void backupApplication(String backupFilename) {
+ Preconditions.checkNotNull(backupFilename);
+
+ // sammoa data directory to use
+ File sourceDirectory = config.getDataDirectory();
+
+ // create export directory
+ File targetDirectory = new File(new File(config.getTmpDirectory(),
+ "backupSammoa-" + System.nanoTime()), "sammoa");
+
+ try {
+ // copy in it all the campaign directory
+ File campaignDirectory = SammoaDirectories.getCampaignDirectory(targetDirectory);
+ FileUtils.copyDirectory(SammoaDirectories.getCampaignDirectory(sourceDirectory),
+ campaignDirectory);
+
+ // copy in it the db
+ File dbDirectory = SammoaDirectories.getDbDirectory(targetDirectory);
+ FileUtils.copyDirectory(SammoaDirectories.getDbDirectory(sourceDirectory),
+ dbDirectory, DB_FILTER);
+
+ // final zip file
+ File zipFile = SammoaDirectories.getBackupFile(sourceDirectory,
+ backupFilename);
+
+ if (logger.isInfoEnabled()) {
+ logger.info("Compress backup to {}", zipFile);
+ }
+ // zip it and clean target directory
+ compressZipFile(zipFile, targetDirectory);
+
+ FileUtils.deleteDirectory(targetDirectory.getParentFile());
+
+ } catch (IOException e) {
+ throw new SammoaTechnicalException("could not backup data", e);
+ }
+
+ }
+}
Property changes on: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/BackupService.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java 2012-08-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/CampaignStorage.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -29,6 +29,7 @@
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import fr.ulr.sammoa.application.DecoratorService;
+import fr.ulr.sammoa.application.SammoaDirectories;
import fr.ulr.sammoa.application.SammoaTechnicalException;
import fr.ulr.sammoa.persistence.Campaign;
import fr.ulr.sammoa.persistence.Region;
@@ -68,7 +69,7 @@
}
public File getMapDirectory() {
- return new File(getDirectory(), "map");
+ return SammoaDirectories.getMapDirectory(getDirectory());
}
public File getMapFile(String mapFilename) {
@@ -76,7 +77,7 @@
}
public File getFlightDirectory() {
- return new File(getDirectory(), "flight");
+ return SammoaDirectories.getFlightDirectory(getDirectory());
}
public Set<String> getFlightIds() {
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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/FlightStorage.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -25,6 +25,7 @@
import com.google.common.collect.Maps;
import fr.ulr.sammoa.application.DecoratorService;
+import fr.ulr.sammoa.application.SammoaDirectories;
import fr.ulr.sammoa.persistence.Campaign;
import fr.ulr.sammoa.persistence.Flight;
import fr.ulr.sammoa.persistence.Region;
@@ -50,7 +51,7 @@
}
public File getAudioDirectory() {
- return new File(getDirectory(), "audio");
+ return SammoaDirectories.getAudioDirectory(getDirectory());
}
public File getAudioFile(Route route, String ext) {
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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/SammoaStorage.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -26,6 +26,7 @@
import com.google.common.base.Charsets;
import com.google.common.io.Files;
import fr.ulr.sammoa.application.DecoratorService;
+import fr.ulr.sammoa.application.SammoaDirectories;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
@@ -92,7 +93,7 @@
}
public File getCsvDirectory() {
- return new File(getDirectory(), "csv");
+ return SammoaDirectories.getCsvDirectory(getDirectory());
}
public File getPropertiesFile() {
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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/input/application/ImportApplicationService.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -29,6 +29,7 @@
import fr.ulr.sammoa.application.FlightService;
import fr.ulr.sammoa.application.ReferentialService;
import fr.ulr.sammoa.application.SammoaContext;
+import fr.ulr.sammoa.application.SammoaDirectories;
import fr.ulr.sammoa.application.SammoaServiceSupport;
import fr.ulr.sammoa.application.SammoaTechnicalException;
import fr.ulr.sammoa.application.io.CampaignStorage;
@@ -320,8 +321,10 @@
Preconditions.checkNotNull(newCampaign);
// create the new empty (or not) campaign storage
+ File dataDirectory = config.getDataDirectory();
CampaignStorage newStorage = SammoaStorages.createCampaignStorage(
- config.getCampaignDirectory(), newCampaign.getTopiaId());
+ SammoaDirectories.getCampaignDirectory(dataDirectory),
+ newCampaign.getTopiaId());
// remove properties files from storage
storageToCopy.deletePropertiesFiles();
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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/application/ExportApplicationService.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -84,6 +84,7 @@
private static final TimeLog TIME_LOG =
new TimeLog(ExportApplicationService.class);
+
private final ExportModelFactory<SammoaEntityEnum> defaultExportModelFactory = new ExportModelFactory<SammoaEntityEnum>() {
@Override
public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<SammoaEntityEnum> meta) {
@@ -126,6 +127,12 @@
}
};
+ /**
+ * Export some data of a campaign.
+ *
+ * @param model model of data to export
+ * @since 0.6
+ */
public void exportApplication(ExportApplicationModel model) {
Preconditions.checkNotNull(model);
Preconditions.checkNotNull(model.getExportFile());
@@ -315,20 +322,4 @@
}
- protected void compressZipFile(File zipFile, File directory) {
-
- try {
- FileUtils.forceMkdir(zipFile.getParentFile());
-
- try {
- ZipUtil.compress(zipFile, directory);
- } finally {
- FileUtils.deleteDirectory(directory);
-
- }
- } catch (IOException e) {
- throw new SammoaTechnicalException("Could not compress directory", e);
- }
- }
-
}
Modified: trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties
===================================================================
--- trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties 2012-08-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties 2012-08-29 11:25:54 UTC (rev 486)
@@ -2,10 +2,12 @@
sammoa.config.application.site.url=Website URL of the application
sammoa.config.application.version=Version of the application
sammoa.config.background.shape.file=Location of the Background shape file
+sammoa.config.backup.directory=BAckup directory where to sotre all data backup
sammoa.config.campaign.directory=Directory where are stored campaign data (maps, flight audio files,...)
sammoa.config.campaign.id=Id of the default campaign to use
sammoa.config.csv.separator=Csv separator caracter to use
sammoa.config.data.directory=Main directory where all data are stored. You can use ${data.directory} in other property values (ex\: ${data.directory}/audio).
+sammoa.config.db.directory=
sammoa.config.flight.number=Number of the default flight to use
sammoa.config.fly.mode=Default fly mode
sammoa.config.gps.check.period=Time in seconds between each GPS capture
@@ -30,7 +32,6 @@
sammoa.config.ui.stop=Stop
sammoa.config.ui.validObservation=Validate the selected observation
sammoa.config.ui.validRoute=Validate the selected route
-sammoa.datePattern=dd/MM/yyyy
sammoa.dateTimePattern=dd/MM/yyyy HH\:mm\:ss
sammoa.dbf.import.error.unableToReadField=impossible to read value for column %s at line %s
sammoa.flight.decorator.flight=Flight %1$d
Modified: trunk/sammoa-ui-swing/src/main/filters/sammoa.properties
===================================================================
--- trunk/sammoa-ui-swing/src/main/filters/sammoa.properties 2012-08-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/filters/sammoa.properties 2012-08-29 11:25:54 UTC (rev 486)
@@ -27,7 +27,7 @@
hibernate.show_sql=false
hibernate.dialect=org.hibernate.dialect.H2Dialect
-hibernate.connection.url=jdbc:h2:file:${data.directory}/db/sammoa
+hibernate.connection.url=jdbc:h2:file:${db.directory}/sammoa
hibernate.connection.username=sa
hibernate.connection.password=sa
hibernate.connection.driver_class=org.h2.Driver
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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/StartApp.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -26,10 +26,8 @@
import fr.ulr.sammoa.application.SammoaConfig;
import fr.ulr.sammoa.application.SammoaContext;
-import fr.ulr.sammoa.application.SammoaTechnicalException;
import fr.ulr.sammoa.ui.swing.util.LogFileInitializer;
import jaxx.runtime.SwingUtil;
-import org.apache.commons.io.FileUtils;
import org.nuiton.i18n.I18n;
import org.nuiton.i18n.init.DefaultI18nInitializer;
import org.slf4j.Logger;
@@ -38,7 +36,6 @@
import javax.swing.UIManager;
import java.awt.Color;
import java.io.File;
-import java.io.IOException;
import java.util.Locale;
/**
@@ -55,16 +52,6 @@
// Create sammoa configuration from sammoa.properties file
SammoaConfig config = new SammoaConfig("sammoa.properties", args);
- //clean sammoa temporary directory
- File tmpDirectory = config.getTmpDirectory();
- try {
- // clean tmp dir
- FileUtils.cleanDirectory(tmpDirectory);
- } catch (IOException e) {
- throw new SammoaTechnicalException(
- "Could not clean temp directory " + tmpDirectory, e);
- }
-
// Create application context
SammoaContext appContext = new SammoaContext(config);
@@ -91,7 +78,7 @@
}
}
- UIManager.put("BlockingLayerUI.blockingColor", new Color(50,50,50));
+ 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/AbstractApplicationModelWithBackup.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/AbstractApplicationModelWithBackup.java (rev 0)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/AbstractApplicationModelWithBackup.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -0,0 +1,80 @@
+package fr.ulr.sammoa.ui.swing.io;
+
+/*
+ * #%L
+ * SAMMOA :: UI Swing
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 UMS 3462, Code Lutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+import org.jdesktop.beans.AbstractSerializableBean;
+
+/**
+ * Abstract model which support backup configuration.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 0.7
+ */
+public abstract class AbstractApplicationModelWithBackup extends AbstractSerializableBean {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String PROPERTY_VALID = "valid";
+
+ public static final String PROPERTY_BACKUP = "backup";
+
+ public static final String PROPERTY_BACKUP_FILENAME = "backupFilename";
+
+ protected boolean backup;
+
+ protected String backupFilename;
+
+ protected boolean valid;
+
+ public boolean isValid() {
+ return valid;
+ }
+
+ public void setValid(boolean valid) {
+ boolean oldValue = this.valid;
+ this.valid = valid;
+ firePropertyChange(PROPERTY_VALID, oldValue, valid);
+ }
+
+ public boolean isBackup() {
+ return backup;
+ }
+
+ public void setBackup(boolean backup) {
+ boolean oldValue = this.backup;
+ this.backup = backup;
+ firePropertyChange(PROPERTY_BACKUP, oldValue, backup);
+ }
+
+ public String getBackupFilename() {
+ return backupFilename;
+ }
+
+ public void setBackupFilename(String backupFilename) {
+ String oldValue = this.backupFilename;
+ this.backupFilename = backupFilename;
+ firePropertyChange(PROPERTY_BACKUP_FILENAME, oldValue, backupFilename);
+ }
+}
Property changes on: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/AbstractApplicationModelWithBackup.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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.css 2012-08-29 11:25:54 UTC (rev 486)
@@ -39,6 +39,7 @@
#importButton {
text: "sammoa.action.importApplication";
+ enabled:{model.isValid()};
}
#loadImportFileButton {
@@ -54,4 +55,26 @@
useIcon:false;
blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
block:{!model.isImportFileLoaded()};
-}
\ No newline at end of file
+}
+
+#backupPanel {
+ border:{new TitledBorder(_("sammoa.label.exportApplication.backup.panel"))};
+}
+
+#backupCheckBox {
+ text:"sammoa.label.exportApplication.backup";
+ selected:{model.isBackup()};
+}
+
+#backupFilenameLbl {
+ text:"sammoa.label.exportApplication.backupFilename";
+}
+
+#backupFilename {
+ text:{model.getBackupFilename()};
+}
+
+#backupInfo {
+ actionIcon:"information";
+ text:{handler.getBackupInfo(model.getBackupFilename())};
+}
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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUI.jaxx 2012-08-29 11:25:54 UTC (rev 486)
@@ -98,7 +98,35 @@
</JPanel>
</cell>
</row>
-
+ <!-- backup panel -->
+ <row>
+ <cell columns='3' fill="horizontal">
+ <JPanel id='backupPanel' layout='{new BorderLayout()}'>
+ <Table id='backupTable' fill='both' constraints='BorderLayout.CENTER' decorator='boxed'>
+ <row>
+ <cell fill="horizontal" columns='2'>
+ <JCheckBox id='backupCheckBox'
+ onItemStateChanged='getModel().setBackup(backupCheckBox.isSelected())'/>
+ </cell>
+ </row>
+ <row>
+ <cell anchor='west'>
+ <JLabel id='backupFilenameLbl'/>
+ </cell>
+ <cell weightx='1' fill="horizontal">
+ <JTextField id='backupFilename'
+ onKeyReleased='getModel().setBackupFilename(((JTextField)event.getSource()).getText())'/>
+ </cell>
+ </row>
+ <row>
+ <cell columns='2'>
+ <JLabel id='backupInfo'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ </row>
<!--import actions-->
<row>
<cell columns='3' fill="both">
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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIHandler.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -26,6 +26,8 @@
import com.google.common.collect.Lists;
import fr.ulr.sammoa.application.FlightService;
import fr.ulr.sammoa.application.ReferentialService;
+import fr.ulr.sammoa.application.SammoaDirectories;
+import fr.ulr.sammoa.application.io.BackupService;
import fr.ulr.sammoa.application.io.CampaignStorage;
import fr.ulr.sammoa.application.io.FlightStorage;
import fr.ulr.sammoa.application.io.input.application.ImportApplicationModel;
@@ -40,6 +42,7 @@
import jaxx.runtime.SwingUtil;
import jaxx.runtime.swing.ErrorDialogUI;
import jaxx.runtime.swing.editor.FileEditor;
+import org.apache.commons.lang.StringUtils;
import org.nuiton.util.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -53,6 +56,7 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
+import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -82,6 +86,8 @@
protected final UIDecoratorService decoratorService;
+ protected final BackupService backupService;
+
public ImportApplicationUIHandler(SammoaUIContext context,
ImportApplicationUI ui) {
this.context = context;
@@ -90,6 +96,7 @@
this.flightService = context.getService(FlightService.class);
this.referentialService = context.getService(ReferentialService.class);
this.decoratorService = context.getService(UIDecoratorService.class);
+ this.backupService = context.getService(BackupService.class);
}
@Override
@@ -114,7 +121,16 @@
} else if (ImportApplicationUIModel.PROPERTY_IMPORT_FILE_LOADED.equals(propertyName)) {
boolean newValue = (Boolean) evt.getNewValue();
onImportFileLoaded(newValue);
+ } else if (ImportApplicationUIModel.PROPERTY_CAMPAIGN_EXIST.equals(propertyName)) {
+ boolean newValue = (Boolean) evt.getNewValue();
+ onCampaignExistChanged(newValue);
}
+
+ if (!ImportApplicationUIModel.PROPERTY_VALID.equals(propertyName)) {
+
+ // validate model
+ validateModel();
+ }
}
});
}
@@ -122,6 +138,10 @@
@Override
public void afterInitUI() {
+ String backupFilename = String.format(
+ "backup-%1$td-%1$tm-%1$ty-%1$tH_%1$tM_%1$tS.zip", new Date());
+ getModel().setBackupFilename(backupFilename);
+
// Boolean editor/renderer on table
{
JTable table = ui.getLoadImportFileResultFlightsTable();
@@ -162,10 +182,36 @@
public void importApplication() {
+ JFrame frame = ui.getParentContainer(JFrame.class);
+
+ ImportApplicationUIModel model = getModel();
+
+ if (model.isBackup()) {
+
+ String backupFilename = model.getBackupFilename();
+
+ try {
+ SammoaUtil.updateBusyState(frame.getRootPane(), true);
+ ui.getBusyBlockLayerUI().setBlock(true);
+
+ // backup sammoa data
+ backupService.backupApplication(backupFilename);
+ SammoaUtil.showSuccessMessage(
+ frame,
+ _("sammoa.messageDialog.sammoa.backup.success",
+ getBackupFile(backupFilename)));
+ } catch (Exception e) {
+ ErrorDialogUI.showError(e);
+ } finally {
+ ui.getBusyBlockLayerUI().setBlock(false);
+ SammoaUtil.updateBusyState(frame.getRootPane(), false);
+ }
+ }
+
// get service model
- ImportApplicationModel dataModel = getModel().toModel();
- JFrame frame = ui.getParentContainer(JFrame.class);
+ ImportApplicationModel dataModel = model.toModel();
+
SammoaUtil.updateBusyState(frame, true);
try {
importService.importApplication(dataModel);
@@ -173,7 +219,7 @@
SammoaUtil.showSuccessMessage(
frame,
_("sammoa.messageDialog.aplication.import.success",
- getModel().getImportFile()));
+ model.getImportFile()));
} catch (Exception e) {
ErrorDialogUI.showError(e);
@@ -187,6 +233,12 @@
context.changeScreen(SammoaScreen.HOME);
}
+ public String getBackupInfo(String filename) {
+ File backupFile = getBackupFile(filename == null ? "" : filename);
+ String result = _("sammoa.label.exportApplication.backupInfo", backupFile);
+ return result;
+ }
+
protected ImportApplicationUIModel getModel() {
return ui.getModel();
}
@@ -313,4 +365,48 @@
label.setText(infoLabel);
}
+ protected void onCampaignExistChanged(boolean newValue) {
+
+ // always force to backup if data could be lost
+ if (newValue) {
+ getModel().setBackup(true);
+ }
+ }
+
+ protected void validateModel() {
+ boolean valid = true;
+
+ ImportApplicationUIModel model = getModel();
+
+ File importFile = model.getImportFile();
+
+ if (importFile == null) {
+ // no file loaded
+ valid = false;
+ }
+
+ if (model.isBackup()) {
+
+ // validate that backup filename not empty and does not exist
+ // in backup directory
+ String backupFilename = model.getBackupFilename();
+ if (StringUtils.isBlank(backupFilename)) {
+ valid = false;
+ } else {
+ File backupFile = getBackupFile(backupFilename);
+ if (backupFile.exists()) {
+ valid = false;
+ }
+ }
+ }
+
+ model.setValid(valid);
+ }
+
+ protected File getBackupFile(String backupFilename) {
+ File result = SammoaDirectories.getBackupFile(
+ context.getConfig().getDataDirectory(), backupFilename);
+ return result;
+ }
+
}
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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/input/application/ImportApplicationUIModel.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -27,7 +27,7 @@
import fr.ulr.sammoa.application.io.CampaignStorage;
import fr.ulr.sammoa.application.io.input.application.ImportApplicationModel;
import fr.ulr.sammoa.persistence.Flight;
-import org.jdesktop.beans.AbstractSerializableBean;
+import fr.ulr.sammoa.ui.swing.io.AbstractApplicationModelWithBackup;
import java.io.File;
import java.util.List;
@@ -38,7 +38,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.6
*/
-public class ImportApplicationUIModel extends AbstractSerializableBean {
+public class ImportApplicationUIModel extends AbstractApplicationModelWithBackup {
private static final long serialVersionUID = 1L;
@@ -138,7 +138,7 @@
flightIds.add(entry.getFlightStorage().getId());
Flight existingFlight = entry.getExistingFlight();
- if (existingFlight!=null) {
+ if (existingFlight != null) {
flightToRemoveIds.add(existingFlight.getTopiaId());
}
}
Modified: 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.css 2012-08-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.css 2012-08-29 11:25:54 UTC (rev 486)
@@ -38,18 +38,10 @@
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";
}
@@ -108,3 +100,27 @@
useIcon:false;
blockingColor:{UIManager.getColor("BlockingLayerUI.blockingColor")};
}
+
+#backupPanel {
+ border:{new TitledBorder(_("sammoa.label.exportApplication.backup.panel"))};
+}
+
+#backupCheckBox {
+ text:"sammoa.label.exportApplication.backup";
+ selected:{model.isBackup()};
+}
+
+#backupFilenameLbl {
+ text:"sammoa.label.exportApplication.backupFilename";
+}
+
+#backupFilename {
+ text:{model.getBackupFilename()};
+}
+
+#backupInfo {
+ actionIcon:"information";
+ text:{handler.getBackupInfo(model.getBackupFilename())};
+}
+
+
Modified: 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/ExportApplicationUI.jaxx 2012-08-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUI.jaxx 2012-08-29 11:25:54 UTC (rev 486)
@@ -119,9 +119,38 @@
</JPanel>
</cell>
</row>
+ <!-- backup panel -->
+ <row>
+ <cell columns='3' fill="horizontal">
+ <JPanel id='backupPanel' layout='{new BorderLayout()}'>
+ <Table id='backupTable' fill='both' constraints='BorderLayout.CENTER' decorator='boxed'>
+ <row>
+ <cell fill="horizontal" columns='2'>
+ <JCheckBox id='backupCheckBox'
+ onItemStateChanged='getModel().setBackup(backupCheckBox.isSelected())'/>
+ </cell>
+ </row>
+ <row>
+ <cell anchor='west'>
+ <JLabel id='backupFilenameLbl'/>
+ </cell>
+ <cell weightx='1' fill="horizontal">
+ <JTextField id='backupFilename'
+ onKeyReleased='getModel().setBackupFilename(((JTextField)event.getSource()).getText())'/>
+ </cell>
+ </row>
+ <row>
+ <cell columns='2'>
+ <JLabel id='backupInfo'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ </row>
<!--export 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='exportButton'
Modified: 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/ExportApplicationUIHandler.java 2012-08-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIHandler.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -25,6 +25,9 @@
import fr.ulr.sammoa.application.FlightService;
import fr.ulr.sammoa.application.ReferentialService;
+import fr.ulr.sammoa.application.SammoaConfig;
+import fr.ulr.sammoa.application.SammoaDirectories;
+import fr.ulr.sammoa.application.io.BackupService;
import fr.ulr.sammoa.application.io.output.application.ExportApplicationModel;
import fr.ulr.sammoa.application.io.output.application.ExportApplicationService;
import fr.ulr.sammoa.persistence.Campaign;
@@ -37,6 +40,7 @@
import jaxx.runtime.SwingUtil;
import jaxx.runtime.swing.ErrorDialogUI;
import jaxx.runtime.swing.renderer.DecoratorListCellRenderer;
+import org.apache.commons.lang.StringUtils;
import org.nuiton.util.FileUtil;
import org.nuiton.util.decorator.Decorator;
import org.slf4j.Logger;
@@ -48,6 +52,7 @@
import java.io.File;
import java.util.Collection;
import java.util.Collections;
+import java.util.Date;
import java.util.List;
import static org.nuiton.i18n.I18n._;
@@ -71,10 +76,14 @@
protected final ReferentialService referentialService;
+ protected final BackupService backupService;
+
protected final FlightService flightService;
protected final UIDecoratorService decoratorService;
+ protected final SammoaConfig config;
+
public ExportApplicationUIHandler(SammoaUIContext context,
ExportApplicationUI ui) {
this.context = context;
@@ -83,6 +92,8 @@
this.referentialService = context.getService(ReferentialService.class);
this.exportService = context.getService(ExportApplicationService.class);
this.decoratorService = context.getService(UIDecoratorService.class);
+ this.backupService = context.getService(BackupService.class);
+ this.config = context.getConfig();
}
@Override
@@ -129,9 +140,10 @@
} 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);
+ } else if (ExportApplicationUIModel.PROPERTY_CALLBACK.equals(propertyName)) {
+ ExportApplicationCallbackMode newValue =
+ (ExportApplicationCallbackMode) evt.getNewValue();
+ onCallbackChanged(newValue);
}
if (!ExportApplicationUIModel.PROPERTY_VALID.equals(propertyName)) {
@@ -158,21 +170,23 @@
File currentDirectory = FileUtil.getCurrentDirectory();
String absolutePath = currentDirectory.getAbsolutePath();
if (absolutePath.endsWith(File.separator + ".")) {
- currentDirectory = new File(absolutePath.substring(0, absolutePath.length() - 2));
+ currentDirectory = new File(
+ absolutePath.substring(0, absolutePath.length() - 2));
}
if (logger.isInfoEnabled()) {
logger.info("Current directory to use: {}", currentDirectory);
}
model.setExportDirectory(currentDirectory);
+ String backupFilename = String.format(
+ "backup-%1$td-%1$tm-%1$ty-%1$tH_%1$tM_%1$tS.zip", new Date());
+ model.setBackupFilename(backupFilename);
+
SwingUtil.fillComboBox(ui.getCampaignCombobox(),
model.getCampaigns(),
model.getSelectedCampaign());
- Flight selectedFlight = model.getSelectedFlight();
-
onSelectedCampaignChanged(model.getSelectedCampaign());
- onSelectedFlightChanged(selectedFlight);
}
@Override
@@ -183,59 +197,84 @@
JFrame frame = ui.getParentContainer(JFrame.class);
+ ExportApplicationUIModel model = getModel();
- try {
- ExportApplicationModel dataModel = getModel().toModel();
+ ExportApplicationModel dataModel = model.toModel();
- boolean doExport = checkFileToExport(dataModel);
+ boolean doExport = checkFileToExport(dataModel);
- if (doExport) {
+ if (!doExport) {
- ui.getBusyBlockLayerUI().setBlock(true);
+ // nothing to do, quit now
+ return;
+ }
+ if (model.isBackup()) {
+
+ String backupFilename = model.getBackupFilename();
+
+ try {
SammoaUtil.updateBusyState(frame.getRootPane(), true);
+ ui.getBusyBlockLayerUI().setBlock(true);
- exportService.exportApplication(dataModel);
-
+ // backup sammoa data
+ backupService.backupApplication(backupFilename);
SammoaUtil.showSuccessMessage(
frame,
- _("sammoa.messageDialog.sammoa.export.success",
- dataModel.getExportFile()));
+ _("sammoa.messageDialog.sammoa.backup.success",
+ getBackupFile(backupFilename)));
+ } catch (Exception e) {
+ ErrorDialogUI.showError(e);
+ } finally {
+ ui.getBusyBlockLayerUI().setBlock(false);
+ SammoaUtil.updateBusyState(frame.getRootPane(), false);
+ }
+ }
+ try {
- boolean removeFlightId = false;
- boolean removeCampaingId = false;
+ ui.getBusyBlockLayerUI().setBlock(true);
+ SammoaUtil.updateBusyState(frame.getRootPane(), true);
- switch (getModel().getCallback()) {
+ exportService.exportApplication(dataModel);
- 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;
+ SammoaUtil.showSuccessMessage(
+ frame,
+ _("sammoa.messageDialog.sammoa.export.success",
+ dataModel.getExportFile()));
- }
+ boolean removeFlightId = false;
+ boolean removeCampaingId = false;
- if (removeCampaingId) {
- context.setCampaignId(null);
+ switch (model.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 (removeFlightId) {
- context.setFlightId(null);
- }
- close();
}
+ if (removeCampaingId) {
+ context.setCampaignId(null);
+ removeFlightId = true;
+ }
+
+ if (removeFlightId) {
+ context.setFlightId(null);
+ }
+ close();
+
} catch (Exception e) {
ErrorDialogUI.showError(e);
} finally {
@@ -244,6 +283,12 @@
}
}
+ public String getBackupInfo(String filename) {
+ File backupFile = getBackupFile(filename == null ? "" : filename);
+ String result = _("sammoa.label.exportApplication.backupInfo", backupFile);
+ return result;
+ }
+
protected void removeFlights(ExportApplicationModel model) {
String campaignId = model.getCampaignId();
Iterable<String> flightIds = model.getFlightIds();
@@ -292,9 +337,30 @@
}
}
+ if (model.isBackup()) {
+
+ // validate that backup filename not empty and does not exist
+ // in backup directory
+ String backupFilename = model.getBackupFilename();
+ if (StringUtils.isBlank(backupFilename)) {
+ valid = false;
+ } else {
+ File backupFile = getBackupFile(backupFilename);
+ if (backupFile.exists()) {
+ valid = false;
+ }
+ }
+ }
+
model.setValid(valid);
}
+ protected File getBackupFile(String backupFilename) {
+ File result = SammoaDirectories.getBackupFile(
+ config.getDataDirectory(), backupFilename);
+ return result;
+ }
+
protected boolean checkFileToExport(ExportApplicationModel dataModel) {
boolean doExport = true;
@@ -370,17 +436,10 @@
selectedFlight);
}
- protected void onSelectedFlightChanged(Flight newCampaign) {
+ protected void onCallbackChanged(ExportApplicationCallbackMode callback) {
- // reset flights,...
- if (logger.isInfoEnabled()) {
- Decorator<Flight> decorator =
- decoratorService.getDecoratorByType(Flight.class);
- logger.info("New selected flight: {}",
- decorator.toString(newCampaign));
- }
-
- ExportApplicationUIModel model = getModel();
+ // always force to backup if data could be lost
+ getModel().setBackup(callback != ExportApplicationCallbackMode.NOTHING);
}
Modified: 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/ExportApplicationUIModel.java 2012-08-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/output/application/ExportApplicationUIModel.java 2012-08-29 11:25:54 UTC (rev 486)
@@ -29,7 +29,7 @@
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 fr.ulr.sammoa.ui.swing.io.AbstractApplicationModelWithBackup;
import org.nuiton.topia.persistence.TopiaId;
import java.io.File;
@@ -42,7 +42,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 0.6
*/
-public class ExportApplicationUIModel extends AbstractSerializableBean {
+public class ExportApplicationUIModel extends AbstractApplicationModelWithBackup {
private static final long serialVersionUID = 1L;
@@ -60,8 +60,6 @@
public static final String PROPERTY_CALLBACK = "callback";
- public static final String PROPERTY_VALID = "valid";
-
protected List<Campaign> campaigns;
protected Campaign selectedCampaign;
@@ -76,8 +74,6 @@
protected ExportApplicationCallbackMode callback;
- protected boolean valid;
-
public File getExportDirectory() {
return exportDirectory;
}
@@ -154,16 +150,6 @@
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;
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-29 11:16:30 UTC (rev 485)
+++ trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-29 11:25:54 UTC (rev 486)
@@ -104,6 +104,10 @@
sammoa.label.campaign.region=Region\:
sammoa.label.campaign.strate=Strates\:
sammoa.label.campaign.transect=Transects\:
+sammoa.label.exportApplication.backup=Do a backup
+sammoa.label.exportApplication.backup.panel=Backup Sammoa data
+sammoa.label.exportApplication.backupFilename=Backup file name
+sammoa.label.exportApplication.backupInfo=Backup file will be stored at %s
sammoa.label.exportApplication.callbackNothing=Do nothing
sammoa.label.exportApplication.callbackRemoveAllData=Remove all data
sammoa.label.exportApplication.callbackRemoveCampaignData=Remove selected campaign data
@@ -145,6 +149,7 @@
sammoa.messageDialog.map.export.success=Map (with %s rows in dbf) was successfully exported in directory\n\n%s
sammoa.messageDialog.mapOrDbf.exportFile.alreadyExists=Export Shape file (%s)\nor dbf file (%s) already exists.\n\nConfirm to override it?
sammoa.messageDialog.observers.import.success=%1$d observers are successfully imported
+sammoa.messageDialog.sammoa.backup.success=Sammoa was successfully backup in file\n\n%s
sammoa.messageDialog.sammoa.export.success=Sammoa was successfully exported in file\n\n%s
sammoa.messageDialog.sammoa.exportFile.alreadyExists=Export File %s already exists.\n\nConfirm to override it?
sammoa.messageDialog.species.import.success=%1$d species are successfully imported
1
0
r485 - trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map
by tchemit@users.forge.codelutin.com 29 Aug '12
by tchemit@users.forge.codelutin.com 29 Aug '12
29 Aug '12
Author: tchemit
Date: 2012-08-29 13:16:30 +0200 (Wed, 29 Aug 2012)
New Revision: 485
Url: http://forge.codelutin.com/repositories/revision/sammoa/485
Log:
fixes #1430: Bug ?\195?\160 l'export des shp d'observation
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java 2012-08-29 10:51:15 UTC (rev 484)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/io/output/map/ExportMapService.java 2012-08-29 11:16:30 UTC (rev 485)
@@ -521,8 +521,13 @@
record.put("SWIM_DIR", observation.getSwimDir());
record.put("CALVES", observation.getCalves());
record.put("PHOTO", observation.isPhoto());
- record.put("OBSERVER", observation.getObserverPosition().getObserver().getInitials());
- record.put("SIDE", observation.getObserverPosition().getPosition());
+ ObserverPosition observerPosition = observation.getObserverPosition();
+ if (observerPosition != null) {
+ if (observerPosition.getObserver() == null) {
+ record.put("OBSERVER", observerPosition.getObserver().getInitials());
+ }
+ record.put("SIDE", observerPosition.getPosition());
+ }
record.put("STATUS", observation.getObservationStatus());
record.put("COMMENT", observation.getComment());
1
0
r484 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application sammoa-application/src/main/resources/i18n sammoa-ui-swing/src/main sammoa-ui-swing/src/main/filters sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing sammoa-ui-swing/src/main/resources sammoa-ui-swing/src/main/resources/i18n
by fdesbois@users.forge.codelutin.com 29 Aug '12
by fdesbois@users.forge.codelutin.com 29 Aug '12
29 Aug '12
Author: fdesbois
Date: 2012-08-29 12:51:15 +0200 (Wed, 29 Aug 2012)
New Revision: 484
Url: http://forge.codelutin.com/repositories/revision/sammoa/484
Log:
fixes #1428 : improve bottom text in about window
Added:
trunk/sammoa-ui-swing/src/main/filters/
trunk/sammoa-ui-swing/src/main/filters/sammoa.properties
Removed:
trunk/sammoa-ui-swing/src/main/resources/sammoa.properties
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java
trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.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/SammoaConfig.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-29 09:08:29 UTC (rev 483)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-29 10:51:15 UTC (rev 484)
@@ -43,7 +43,6 @@
import java.net.URL;
import java.util.Locale;
-import static org.nuiton.i18n.I18n._;
import static org.nuiton.i18n.I18n.n_;
/**
@@ -184,6 +183,16 @@
return applicationConfig.getOptionAsURL(SammoaConfigOption.SITE_URL.key);
}
+ /** @return {@link SammoaConfigOption#ORGANIZATION_NAME} value */
+ public String getOrganizationName() {
+ return applicationConfig.getOption(SammoaConfigOption.ORGANIZATION_NAME.key);
+ }
+
+ /** @return {@link SammoaConfigOption#INCEPTION_YEAR} value */
+ public int getInceptionYear() {
+ return applicationConfig.getOptionAsInt(SammoaConfigOption.INCEPTION_YEAR.key);
+ }
+
/** @return {@link SammoaConfigOption#LOCALE} value */
public Locale getLocale() {
return applicationConfig.getOption(Locale.class, SammoaConfigOption.LOCALE.key);
@@ -193,10 +202,6 @@
applicationConfig.setOption(SammoaConfigOption.LOCALE.key, locale.toString());
}
- public String getCopyrightText() {
- return _("sammoa.copyright.text", getVersion());
- }
-
/** @return {@link SammoaConfigOption#DATA_DIRECTORY} value */
public File getDataDirectory() {
File result = getOrCreateDirectory(SammoaConfigOption.DATA_DIRECTORY);
@@ -367,18 +372,34 @@
Locale.UK.toString(),
Locale.class
),
- VERSION("application.version",
+ VERSION("sammoa.version",
n_("sammoa.config.application.version"),
"",
Version.class,
false,
true
),
- SITE_URL("application.site.url",
+ SITE_URL("sammoa.url",
n_("sammoa.config.application.site.url"),
- "http://maven-site.forge.codelutin.com/sammoa/",
- URL.class
+ "",
+ URL.class,
+ false,
+ true
),
+ ORGANIZATION_NAME("sammoa.organizationName",
+ n_("sammoa.config.license.organizationName"),
+ "",
+ String.class,
+ false,
+ true
+ ),
+ INCEPTION_YEAR("sammoa.inceptionYear",
+ n_("sammoa.config.license.organizationName"),
+ "2012",
+ Integer.class,
+ false,
+ true
+ ),
ADMIN_EMAIL("admin.email",
n_("sammoa.config.admin.email"),
"fdesbois(a)codelutin.com",
Modified: trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties
===================================================================
--- trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties 2012-08-29 09:08:29 UTC (rev 483)
+++ trunk/sammoa-application/src/main/resources/i18n/sammoa-application_en_GB.properties 2012-08-29 10:51:15 UTC (rev 484)
@@ -30,7 +30,6 @@
sammoa.config.ui.stop=Stop
sammoa.config.ui.validObservation=Validate the selected observation
sammoa.config.ui.validRoute=Validate the selected route
-sammoa.copyright.text=Copyright CRMM 2012
sammoa.datePattern=dd/MM/yyyy
sammoa.dateTimePattern=dd/MM/yyyy HH\:mm\:ss
sammoa.dbf.import.error.unableToReadField=impossible to read value for column %s at line %s
Copied: trunk/sammoa-ui-swing/src/main/filters/sammoa.properties (from rev 483, trunk/sammoa-ui-swing/src/main/resources/sammoa.properties)
===================================================================
--- trunk/sammoa-ui-swing/src/main/filters/sammoa.properties (rev 0)
+++ trunk/sammoa-ui-swing/src/main/filters/sammoa.properties 2012-08-29 10:51:15 UTC (rev 484)
@@ -0,0 +1,39 @@
+###
+# #%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%
+###
+## DB Configuration
+hibernate.hbm2ddl.auto=update
+hibernate.show_sql=false
+
+hibernate.dialect=org.hibernate.dialect.H2Dialect
+hibernate.connection.url=jdbc:h2:file:${data.directory}/db/sammoa
+hibernate.connection.username=sa
+hibernate.connection.password=sa
+hibernate.connection.driver_class=org.h2.Driver
+hibernate.connection.provider_class=org.nuiton.topia.framework.TopiaConnectionProvider
+
+sammoa.version=${project.version}
+sammoa.url=${project.url}
+sammoa.inceptionYear=${project.inceptionYear}
+sammoa.organizationName=${license.organizationName}
Property changes on: trunk/sammoa-ui-swing/src/main/filters/sammoa.properties
___________________________________________________________________
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/MainUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-29 09:08:29 UTC (rev 483)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-29 10:51:15 UTC (rev 484)
@@ -58,6 +58,7 @@
import java.awt.Desktop;
import java.io.File;
import java.net.URL;
+import java.util.Calendar;
import static org.nuiton.i18n.I18n._;
import static org.nuiton.i18n.I18n.n_;
@@ -401,7 +402,18 @@
AboutPanel about = new AboutPanel();
about.setTitle(_("sammoa.title.about"));
about.setAboutText(_("sammoa.about.message"));
- about.setBottomText(context.getConfig().getCopyrightText());
+
+ SammoaConfig config = context.getConfig();
+ int currentYear = Calendar.getInstance().get(Calendar.YEAR);
+ int inceptionYear = config.getInceptionYear();
+ String years;
+ if (currentYear != inceptionYear) {
+ years = inceptionYear + "-" + currentYear;
+ } else {
+ years = inceptionYear + "";
+ }
+
+ about.setBottomText(_("sammoa.about.bottomText", config.getOrganizationName(), years, config.getVersion()));
about.setIconPath(iconPath);
about.setLicenseFile(licensePath);
about.setThirdpartyFile(thirdPartyPath);
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-29 09:08:29 UTC (rev 483)
+++ trunk/sammoa-ui-swing/src/main/resources/i18n/sammoa-ui-swing_en_GB.properties 2012-08-29 10:51:15 UTC (rev 484)
@@ -1,4 +1,5 @@
SAMMOA=Sammoa
+sammoa.about.bottomText=Copyright %s - %s - version %s
sammoa.about.message=About Sammoa
sammoa.action.about=About
sammoa.action.about.tip=About
Deleted: trunk/sammoa-ui-swing/src/main/resources/sammoa.properties
===================================================================
--- trunk/sammoa-ui-swing/src/main/resources/sammoa.properties 2012-08-29 09:08:29 UTC (rev 483)
+++ trunk/sammoa-ui-swing/src/main/resources/sammoa.properties 2012-08-29 10:51:15 UTC (rev 484)
@@ -1,34 +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%
-###
-## DB Configuration
-hibernate.hbm2ddl.auto=update
-hibernate.show_sql=false
-
-hibernate.dialect=org.hibernate.dialect.H2Dialect
-hibernate.connection.url=jdbc:h2:file:${data.directory}/db/sammoa
-hibernate.connection.username=sa
-hibernate.connection.password=sa
-hibernate.connection.driver_class=org.h2.Driver
-hibernate.connection.provider_class=org.nuiton.topia.framework.TopiaConnectionProvider
1
0
r483 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing 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 sammoa-ui-swing/src/main/resources/icons
by fdesbois@users.forge.codelutin.com 29 Aug '12
by fdesbois@users.forge.codelutin.com 29 Aug '12
29 Aug '12
Author: fdesbois
Date: 2012-08-29 11:08:29 +0200 (Wed, 29 Aug 2012)
New Revision: 483
Url: http://forge.codelutin.com/repositories/revision/sammoa/483
Log:
refs #1422 :
- missing validation icon
- improve observation table refresh with proper lines
- improve colors (background/foreground)
- auto-select route from observation during validation
Added:
trunk/sammoa-ui-swing/src/main/resources/icons/action-tick.png
Modified:
trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerOnBoard.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java
trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java
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/flight/FlightUIHandler.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.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/SammoaColorHighlighter.java
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java
Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerOnBoard.java
===================================================================
--- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerOnBoard.java 2012-08-29 09:08:11 UTC (rev 482)
+++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerOnBoard.java 2012-08-29 09:08:29 UTC (rev 483)
@@ -116,8 +116,7 @@
@Override
public void locationChanged(GpsLocationEvent event) {
GeoPoint newLocation = event.getNewValue();
- if (!GeoPoints.isCoordinatesEmpty(newLocation) /* && newLocation.getTopiaId() == null*/) {
-// lastLocation = newLocation;
+ if (!GeoPoints.isCoordinatesEmpty(newLocation) && newLocation.getTopiaId() == null) {
newLocation.setFlight(flight);
persistence.delayEntityCreation(newLocation);
}
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java 2012-08-29 09:08:11 UTC (rev 482)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Observations.java 2012-08-29 09:08:29 UTC (rev 483)
@@ -26,7 +26,6 @@
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
-import com.google.common.collect.FluentIterable;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
@@ -69,26 +68,26 @@
boolean ignoreDeleted) {
return Iterables.filter(observations, inRoute(route, routes, ignoreDeleted));
}
+//
+// public static Observation findFirstInRoute(Iterable<Observation> observations,
+// Route route,
+// Iterable<Route> routes,
+// boolean ignoreDeleted) {
+//
+// Observation result;
+// if (route == null) {
+// result = null;
+//
+// } else {
+//
+// result = FluentIterable.from(observations)
+// .filter(inRoute(route, routes, ignoreDeleted))
+// .first()
+// .orNull();
+// }
+// return result;
+// }
- public static Observation findFirstInRoute(Iterable<Observation> observations,
- Route route,
- Iterable<Route> routes,
- boolean ignoreDeleted) {
-
- Observation result;
- if (route == null) {
- result = null;
-
- } else {
-
- result = FluentIterable.from(observations)
- .filter(inRoute(route, routes, ignoreDeleted))
- .first()
- .orNull();
- }
- return result;
- }
-
public static boolean inRoute(Observation observation,
Route route,
Iterable<Route> routes,
@@ -134,7 +133,7 @@
public static Predicate<Observation> inRoute(Route route,
Iterable<Route> routes,
boolean ignoreDeleted) {
- return new ObservationInRoutePredicate(route, routes, ignoreDeleted);
+ return new InRoutePredicate(route, routes, ignoreDeleted);
}
public static void removeOtherSpecies(List<Observation> observations,
@@ -197,7 +196,7 @@
}
};
- private static class ObservationInRoutePredicate implements Predicate<Observation> {
+ private static class InRoutePredicate implements Predicate<Observation> {
protected Route route;
@@ -205,9 +204,9 @@
protected boolean ignoreDeleted;
- public ObservationInRoutePredicate(Route route,
- Iterable<Route> routes,
- boolean ignoreDeleted) {
+ public InRoutePredicate(Route route,
+ Iterable<Route> routes,
+ boolean ignoreDeleted) {
Preconditions.checkNotNull(route);
Preconditions.checkNotNull(routes);
this.route = route;
Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java
===================================================================
--- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-08-29 09:08:11 UTC (rev 482)
+++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-08-29 09:08:29 UTC (rev 483)
@@ -25,6 +25,7 @@
import com.google.common.base.Function;
import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
@@ -61,10 +62,6 @@
return Iterables.transform(routes, TO_DATE_FUNCTION);
}
-// public static Iterable<TransectFlight> toTransectFlights(Iterable<Route> routes) {
-// return Iterables.transform(routes, TO_TRANSECT_FLIGHT_FUNCTION);
-// }
-
public static Set<ObserverPosition> toObserverPositions(Iterable<Route> routes) {
Set<ObserverPosition> result = Sets.newHashSet();
for (Route route : routes) {
@@ -156,6 +153,13 @@
return getNext(routes, route, orderByDate());
}
+ public static Route findWithObservation(Iterable<Route> routes,
+ Observation observation,
+ boolean ignoreDeleted) {
+
+ return Iterables.find(routes, new WithObservationPredicate(observation, routes, ignoreDeleted), null);
+ }
+
public static Date getMiddleTime(Route previousRoute, Route nextRoute) {
Date previousTime = previousRoute.getBeginTime();
Date nextTime = nextRoute.getBeginTime();
@@ -202,14 +206,30 @@
}
};
-// private static Function<Route, TransectFlight> TO_TRANSECT_FLIGHT_FUNCTION = new Function<Route, TransectFlight>() {
-//
-// @Override
-// public TransectFlight apply(Route input) {
-// return input.getTransectFlight();
-// }
-// };
+ private static class WithObservationPredicate implements Predicate<Route> {
+ protected Observation observation;
+
+ protected Iterable<Route> routes;
+
+ protected boolean ignoreDeleted;
+
+ public WithObservationPredicate(Observation observation,
+ Iterable<Route> routes,
+ boolean ignoreDeleted) {
+ Preconditions.checkNotNull(observation);
+ Preconditions.checkNotNull(routes);
+ this.observation = observation;
+ this.routes = routes;
+ this.ignoreDeleted = ignoreDeleted;
+ }
+
+ @Override
+ public boolean apply(Route input) {
+ return Observations.inRoute(observation, input, routes, ignoreDeleted);
+ }
+ }
+
private static <T> T getNext(Iterable<T> elements,
final T element,
final Comparator<T> comparator) {
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-29 09:08:11 UTC (rev 482)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/MainUIHandler.java 2012-08-29 09:08:29 UTC (rev 483)
@@ -52,7 +52,9 @@
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
+import javax.swing.plaf.BorderUIResource;
import java.awt.BorderLayout;
+import java.awt.Color;
import java.awt.Desktop;
import java.io.File;
import java.net.URL;
@@ -113,6 +115,9 @@
SwingUtil.getLayer(ui.getBody()).setUI(new BetaLayerUI());
+ UIManager.put("Table.focusCellHighlightBorder",
+ new BorderUIResource.LineBorderUIResource(Color.BLACK));
+
setScreen(SammoaScreen.HOME);
}
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-29 09:08:11 UTC (rev 482)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/SammoaColors.java 2012-08-29 09:08:29 UTC (rev 483)
@@ -49,14 +49,18 @@
public static final Color POSITION_RIGHT_COLOR = Color.GREEN;
- public static final Color NEXT_TRANSECT_ROW_COLOR = new Color(233, 255, 235);
+// public static final Color NEXT_TRANSECT_ROW_COLOR = new Color(233, 255, 235);
+ public static final Color NEXT_TRANSECT_ROW_COLOR = new Color(152, 106, 255);
+
public static final Color OBSERVATION_FOR_ROUTE_ROW_COLOR = new Color(171, 214, 255);
- public static final Color ROUTE_FOR_TRANSECT_ROW_COLOR = new Color(171, 214, 255);
+// public static final Color ROUTE_FOR_TRANSECT_ROW_COLOR = new Color(171, 214, 255);
- public static final Color ROUTE_NO_MODIFICATION_ROW_COLOR = new Color(255, 233, 233);
+// public static final Color ROUTE_NO_MODIFICATION_ROW_COLOR = new Color(255, 233, 233);
+ public static final Color ROUTE_NO_MODIFICATION_ROW_COLOR = Color.RED;
+
public static final Color FLIGHT_TRACKING_LINE_COLOR = Color.RED;
public static final Color TRANSECT_LINE_COLOR = new Color(102, 0, 255);
@@ -67,6 +71,8 @@
public static final Color DELETED_ROW_COLOR = Color.GRAY;
- public static final Color VALID_ROW_COLOR = Color.GREEN;
+ public static final Color VALID_ROW_COLOR = new Color(9, 157, 20);
+// public static final Color SELECTED_ROW_COLOR = new Color(171, 214, 255);
+
}
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-29 09:08:11 UTC (rev 482)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-29 09:08:29 UTC (rev 483)
@@ -136,6 +136,7 @@
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
+import java.awt.Color;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.ItemEvent;
@@ -478,24 +479,26 @@
column.setCellRenderer(editorRenderer);
}
- table.addHighlighter(SammoaUtil.newColorHighlighter(
+ table.addHighlighter(SammoaUtil.newBackgroundColorHighlighter(
new CurrentTransectHighlightPredicate(tableModel),
SammoaColors.CURRENT_TRANSECT_ROW_COLOR)
);
- table.addHighlighter(SammoaUtil.newColorHighlighter(
+ table.addHighlighter(SammoaUtil.newBackgroundColorHighlighter(
new NextTransectHighlightPredicate(tableModel),
SammoaColors.NEXT_TRANSECT_ROW_COLOR)
);
- table.addHighlighter(SammoaUtil.newColorHighlighter(
+ table.addHighlighter(SammoaUtil.newForegroundColorHighlighter(
new DeletedRowHighlightPredicate(getModel().getTransectFlights()),
SammoaColors.DELETED_ROW_COLOR)
);
- table.addHighlighter(SammoaUtil.newColorHighlighter(
+ table.addHighlighter(SammoaUtil.newForegroundColorHighlighter(
new ValidRowHighlightPredicate(getModel().getTransectFlights()),
SammoaColors.VALID_ROW_COLOR)
);
table.setSortable(false);
+ table.setSelectionBackground(null);
+ table.setSelectionForeground(Color.BLACK);
}
startTime = timeLog.log(startTime, "afterInitUI", "decoration done (editor/renderer)");
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java 2012-08-29 09:08:11 UTC (rev 482)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIModel.java 2012-08-29 09:08:29 UTC (rev 483)
@@ -220,6 +220,10 @@
return getObservations().indexOf(observation);
}
+ public int sizeObservations() {
+ return getObservations().size();
+ }
+
public void setObservations(List<Observation> observations) {
this.observations = observations;
firePropertyChange(PROPERTY_OBSERVATIONS, null, observations);
@@ -227,14 +231,14 @@
public void addObservation(Observation observation) {
List<Observation> oldValue = Lists.newArrayList(getObservations());
- int index = getObservations().size();
+ int index = sizeObservations();
getObservations().add(observation);
fireIndexedPropertyChange(PROPERTY_OBSERVATIONS, index, oldValue, getObservations());
}
public void removeObservation(Observation observation) {
List<Observation> oldValue = Lists.newArrayList(getObservations());
- int index = getObservations().indexOf(observation);
+ int index = indexOfObservations(observation);
getObservations().remove(index);
fireIndexedPropertyChange(PROPERTY_OBSERVATIONS, index, oldValue, getObservations());
}
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-29 09:08:11 UTC (rev 482)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-29 09:08:29 UTC (rev 483)
@@ -24,6 +24,7 @@
*/
import com.google.common.base.Supplier;
+import com.google.common.collect.Iterables;
import fr.ulr.sammoa.application.FlightService;
import fr.ulr.sammoa.application.device.DeviceState;
import fr.ulr.sammoa.application.device.DeviceStateEvent;
@@ -284,7 +285,7 @@
// Highlighter for no modification
dataTable.addHighlighter(
- SammoaUtil.newColorHighlighter(
+ SammoaUtil.newForegroundColorHighlighter(
new RouteNoModificationHighlightPredicate(tableModel),
SammoaColors.ROUTE_NO_MODIFICATION_ROW_COLOR)
);
@@ -302,11 +303,11 @@
NuitonValidatorScope.ERROR,
NuitonValidatorScope.WARNING);
- dataTable.addHighlighter(SammoaUtil.newColorHighlighter(
+ dataTable.addHighlighter(SammoaUtil.newForegroundColorHighlighter(
new DeletedRowHighlightPredicate(flightUIModel.getRoutes()),
SammoaColors.DELETED_ROW_COLOR)
);
- dataTable.addHighlighter(SammoaUtil.newColorHighlighter(
+ dataTable.addHighlighter(SammoaUtil.newForegroundColorHighlighter(
new ValidRowHighlightPredicate(flightUIModel.getRoutes()),
SammoaColors.VALID_ROW_COLOR)
);
@@ -342,50 +343,21 @@
ui.getObservationTableModel())
);
+ // For CircleBack buttons
flightUIModel.addPropertyChangeListener(
- FlightUIModel.PROPERTY_FLIGHT_STATE, new PropertyChangeListener() {
+ FlightUIModel.PROPERTY_FLIGHT_STATE, observationUpdateListener);
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- // les boutons sur toutes les lignes
- // doivent être mis à jour, donc on fait un fire
- // sur toute la table
- logger.debug("Flight state changed, reload observation table data");
- ui.getObservationTableModel().fireTableDataChanged();
- }
- });
-
+ // For highlighting depends on selected route
flightUIModel.addPropertyChangeListener(
- FlightUIModel.PROPERTY_ROUTE_EDIT_BEAN, new PropertyChangeListener() {
+ FlightUIModel.PROPERTY_ROUTE_EDIT_BEAN, observationUpdateListener);
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
-
- logger.debug("Route edition/selection changed, reload observation table data");
- ui.getObservationTableModel().fireTableDataChanged();
-
- FlightUIModel flightUIModel = (FlightUIModel) evt.getSource();
-
- Observation observation =
- Observations.findFirstInRoute(flightUIModel.getObservations(),
- (Route) evt.getNewValue(),
- flightUIModel.getRoutes(),
- true);
-
- if (observation != null) {
- int firstRowIndex = flightUIModel.indexOfObservations(observation);
- ui.getObservationTable().scrollRowToVisible(firstRowIndex);
- }
- }
- });
-
JXTable dataTable = ui.getObservationTable();
// set combobox renderer for ObservationStatus
dataTable.setDefaultEditor(ObservationStatus.class, new DefaultCellEditor(new JComboBox(ObservationStatus.values())));
dataTable.addHighlighter(
- SammoaUtil.newColorHighlighter(
+ SammoaUtil.newBackgroundColorHighlighter(
new ObservationForSelectedRouteHighlightPredicate(flightUIModel),
SammoaColors.OBSERVATION_FOR_ROUTE_ROW_COLOR)
);
@@ -463,6 +435,16 @@
if (logger.isInfoEnabled()) {
logger.info("Select observation from index {}", newSelectedRow);
}
+
+ // We need to auto-select the route in validation mode
+ if (flightUIModel.isValidationMode()) {
+ Route route = Routes.findWithObservation(
+ flightUIModel.getRoutes(), observation, true);
+
+ int routeIndex = flightUIModel.indexOfRoutes(route);
+ ui.getRouteTable().getSelectionModel().setSelectionInterval(routeIndex, routeIndex);
+ }
+
} else {
if (logger.isInfoEnabled()) {
logger.info("No observation selected");
@@ -509,11 +491,11 @@
NuitonValidatorScope.ERROR,
NuitonValidatorScope.WARNING);
- dataTable.addHighlighter(SammoaUtil.newColorHighlighter(
+ dataTable.addHighlighter(SammoaUtil.newForegroundColorHighlighter(
new DeletedRowHighlightPredicate(flightUIModel.getObservations()),
SammoaColors.DELETED_ROW_COLOR)
);
- dataTable.addHighlighter(SammoaUtil.newColorHighlighter(
+ dataTable.addHighlighter(SammoaUtil.newForegroundColorHighlighter(
new ValidRowHighlightPredicate(flightUIModel.getObservations()),
SammoaColors.VALID_ROW_COLOR)
);
@@ -548,7 +530,7 @@
validator, dataLocator
);
- Highlighter highlighter = SammoaUtil.newColorHighlighter(
+ Highlighter highlighter = SammoaUtil.newBackgroundColorHighlighter(
predicate, SwingValidatorUtil.getColor(scope));
editor.addHighlighter(highlighter);
}
@@ -643,6 +625,8 @@
// make tab key to focus only next editable cell
table.setSelectionModel(new ForceSelectionSelectionModel());
+ table.setSelectionBackground(null);
+ table.setSelectionForeground(Color.BLACK);
// table.setSortable(context.isValidationMode());
table.setSortable(false);
@@ -745,6 +729,70 @@
});
}
+ private PropertyChangeListener observationUpdateListener = new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+
+// int selectedRow = ui.getObservationTable().getSelectedRow();
+
+// ui.getObservationTableModel().fireTableDataChanged();
+
+ if (FlightUIModel.PROPERTY_ROUTE_EDIT_BEAN.equals(evt.getPropertyName())) {
+
+
+ Route oldValue = (Route) evt.getOldValue();
+ if (oldValue != null) {
+ updateObservationTable(oldValue, false);
+ }
+ Route newValue = (Route) evt.getNewValue();
+ if (newValue != null) {
+ updateObservationTable(newValue, true);
+ }
+
+ } else {
+
+ ui.getObservationTableModel().fireTableRowsUpdated(
+ 0, ui.getFlightUIModel().sizeObservations() - 1);
+ }
+
+
+// if (selectedRow != -1) {
+// ui.getObservationTable().scrollRowToVisible(selectedRow);
+// ui.getObservationTable().setRowSelectionInterval(selectedRow, selectedRow);
+// }
+ }
+ };
+
+ protected void updateObservationTable(Route route, boolean scrollToFirst) {
+
+ FlightUIModel model = ui.getFlightUIModel();
+
+ Iterable<Observation> observations =
+ Observations.filterInRoute(model.getObservations(), route, model.getRoutes(), true);
+
+ if (Iterables.isEmpty(observations)) {
+ // nothing to do
+ } else {
+
+ int firstIndex = -1;
+ int lastIndex = -1;
+ for (Observation observation : observations) {
+ int index = model.indexOfObservations(observation);
+ if (firstIndex == -1 || firstIndex > index) {
+ firstIndex = index;
+ }
+ if (lastIndex == -1 || lastIndex < index) {
+ lastIndex = index;
+ }
+ }
+ ui.getObservationTableModel().fireTableRowsUpdated(firstIndex, lastIndex);
+ if (scrollToFirst) {
+ ui.getObservationTable().scrollRowToVisible(firstIndex);
+ }
+ }
+ }
+
private static class RouteValidatorDataLocator implements SwingListValidatorDataLocator<Route> {
@Override
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaColorHighlighter.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaColorHighlighter.java 2012-08-29 09:08:11 UTC (rev 482)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaColorHighlighter.java 2012-08-29 09:08:29 UTC (rev 483)
@@ -28,6 +28,7 @@
import org.jdesktop.swingx.decorator.HighlightPredicate;
import org.jdesktop.swingx.util.PaintUtils;
+import javax.swing.JButton;
import java.awt.Color;
import java.awt.Component;
@@ -40,16 +41,29 @@
protected Color color;
- public SammoaColorHighlighter(HighlightPredicate predicate, Color color) {
+ protected boolean foreground;
+
+ public SammoaColorHighlighter(HighlightPredicate predicate, Color color, boolean foreground) {
super(predicate);
this.color = color;
+ this.foreground = foreground;
}
@Override
protected Component doHighlight(Component component, ComponentAdapter adapter) {
- component.setBackground(color);
- if (adapter.isSelected()) {
- component.setForeground(PaintUtils.computeForeground(color));
+ if (component instanceof JButton) {
+ // do nothing
+
+ } else {
+ if (foreground) {
+ component.setForeground(color);
+
+ } else {
+ component.setBackground(color);
+ if (adapter.isSelected()) {
+ component.setForeground(PaintUtils.computeForeground(color));
+ }
+ }
}
return component;
}
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-29 09:08:11 UTC (rev 482)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java 2012-08-29 09:08:29 UTC (rev 483)
@@ -36,8 +36,19 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.*;
-import java.awt.*;
+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.JTable;
+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 java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
@@ -56,10 +67,14 @@
// never instanciate util class
}
- public static Highlighter newColorHighlighter(HighlightPredicate predicate, Color color) {
- return new SammoaColorHighlighter(predicate, color);
+ public static Highlighter newBackgroundColorHighlighter(HighlightPredicate predicate, Color color) {
+ return new SammoaColorHighlighter(predicate, color, false);
}
+ public static Highlighter newForegroundColorHighlighter(HighlightPredicate predicate, Color color) {
+ return new SammoaColorHighlighter(predicate, color, true);
+ }
+
public static Object getPropertyValue(Object bean, String... properties) {
Object result;
try {
Added: trunk/sammoa-ui-swing/src/main/resources/icons/action-tick.png
===================================================================
(Binary files differ)
Property changes on: trunk/sammoa-ui-swing/src/main/resources/icons/action-tick.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Added: svn:keywords
+ Author Date Id Revision HeadURL
1
0
r482 - trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/transect
by fdesbois@users.forge.codelutin.com 29 Aug '12
by fdesbois@users.forge.codelutin.com 29 Aug '12
29 Aug '12
Author: fdesbois
Date: 2012-08-29 11:08:11 +0200 (Wed, 29 Aug 2012)
New Revision: 482
Url: http://forge.codelutin.com/repositories/revision/sammoa/482
Log:
refs #1422 : resolve issue with strate decoration in new transect UI
Modified:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/transect/TransectUIHandler.java
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/transect/TransectUIHandler.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/transect/TransectUIHandler.java 2012-08-29 08:56:54 UTC (rev 481)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/transect/TransectUIHandler.java 2012-08-29 09:08:11 UTC (rev 482)
@@ -26,7 +26,6 @@
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import fr.ulr.sammoa.application.ReferentialService;
-import fr.ulr.sammoa.persistence.Strate;
import fr.ulr.sammoa.persistence.Transect;
import fr.ulr.sammoa.ui.swing.SammoaUIContext;
import fr.ulr.sammoa.ui.swing.SammoaUIHandler;
@@ -88,7 +87,7 @@
context.getService(UIDecoratorService.class);
ui.getTransectStrateComboBox().setRenderer(
- decoratorService.newListCellRender(Strate.class));
+ decoratorService.newListCellRender(StrateModel.class));
SwingValidatorUtil.installUI(ui.getErrorTable(),
new SwingValidatorMessageTableRenderer());
}
1
0
r481 - trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action
by fdesbois@users.forge.codelutin.com 29 Aug '12
by fdesbois@users.forge.codelutin.com 29 Aug '12
29 Aug '12
Author: fdesbois
Date: 2012-08-29 10:56:54 +0200 (Wed, 29 Aug 2012)
New Revision: 481
Url: http://forge.codelutin.com/repositories/revision/sammoa/481
Log:
fixes #1424 : resolve issue with route dooblon delete and validation button activation
Modified:
trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidRouteAction.java
Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidRouteAction.java
===================================================================
--- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidRouteAction.java 2012-08-28 20:43:32 UTC (rev 480)
+++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/action/ValidRouteAction.java 2012-08-29 08:56:54 UTC (rev 481)
@@ -38,6 +38,8 @@
import javax.swing.Action;
import java.awt.event.ActionEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import static org.nuiton.i18n.I18n._;
@@ -58,7 +60,24 @@
public ValidRouteAction(JAXXContext context) {
super(_("sammoa.action.validRoute"), context);
putValue(Action.SHORT_DESCRIPTION, _("sammoa.action.validRoute.tip"));
- bindModelProperties(FlightUIModel.PROPERTY_ROUTE_EDIT_BEAN);
+ getModel().addPropertyChangeListener(
+ FlightUIModel.PROPERTY_ROUTE_EDIT_BEAN, new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ Route oldValue = (Route) evt.getOldValue();
+ if (oldValue != null) {
+ oldValue.removePropertyChangeListener(
+ Route.PROPERTY_DELETED, enabledListener);
+ }
+ Route newValue = (Route) evt.getNewValue();
+ if (newValue != null) {
+ newValue.addPropertyChangeListener(
+ Route.PROPERTY_DELETED, enabledListener);
+ }
+ enabledListener.propertyChange(evt);
+ }
+ });
}
@Override
1
0