r373 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application sammoa-application/src/main/java/fr/ulr/sammoa/application/device sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController sammoa-application/src/main/java/fr/ulr/sammoa/application/map sammoa-application/src/test/java/fr/ulr/sammoa/application/map sammoa-ui
Author: fdesbois Date: 2012-08-08 20:26:33 +0200 (Wed, 08 Aug 2012) New Revision: 373 Url: http://forge.codelutin.com/repositories/revision/sammoa/373 Log: refs #1378 : improve errors Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceStateEvent.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorder.java 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/AudioRecorderMock.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java trunk/sammoa-ui-swing/src/main/resources/logback.xml 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-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/SammoaConfig.java 2012-08-08 18:26:33 UTC (rev 373) @@ -37,7 +37,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.swing.KeyStroke; +import javax.swing.*; import java.io.File; import java.io.IOException; import java.net.URL; @@ -432,7 +432,7 @@ "true", Boolean.class ), - /** Time in seconds before timeout (NO_DATA, NO_DEVICE) */ + /** Time in seconds before timeout (ERROR, NO_DEVICE) */ CAMPAIGN_ID("campaign.id", n_("sammoa.config.campaign.id"), null, Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceState.java 2012-08-08 18:26:33 UTC (rev 373) @@ -37,5 +37,5 @@ /** voyant vert : reception de données */ RECORDING, /** voyant rouge clignotant : périphirique prêt mais aucune données */ - NO_DATA + ERROR } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceStateEvent.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceStateEvent.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/DeviceStateEvent.java 2012-08-08 18:26:33 UTC (rev 373) @@ -36,6 +36,8 @@ protected DeviceState newValue; + protected DeviceTechnicalException error; + public DeviceStateEvent(DeviceManager source, DeviceState oldValue, DeviceState newValue) { this.source = source; this.oldValue = oldValue; @@ -53,4 +55,12 @@ public DeviceState getNewValue() { return newValue; } + + public DeviceTechnicalException getError() { + return error; + } + + public void setError(DeviceTechnicalException error) { + this.error = error; + } } \ No newline at end of file Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorder.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorder.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorder.java 2012-08-08 18:26:33 UTC (rev 373) @@ -27,7 +27,6 @@ import javax.sound.sampled.AudioFileFormat; import java.io.File; -import java.io.IOException; /** * Recorder of audio files. Two recorder are used and a delay between recording @@ -51,9 +50,8 @@ * * @param outputFile File to record * @param delaySeconds Delay for previous recording - * @throws IOException for recording issues on the file */ - void record(File outputFile, long delaySeconds) throws IOException; + void record(File outputFile, long delaySeconds); /** * Stop the current recording after {@code delaySeconds}. Modified: 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/AudioRecorderDefault.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderDefault.java 2012-08-08 18:26:33 UTC (rev 373) @@ -129,13 +129,15 @@ return state; } - protected void setState(DeviceState state) { + public void setState(DeviceState state, DeviceTechnicalException error) { DeviceState oldValue = getState(); this.state = state; // Fire on listeners for (DeviceStateListener listener : listeners) { - listener.stateChanged(new DeviceStateEvent(this, oldValue, state)); + DeviceStateEvent event = new DeviceStateEvent(this, oldValue, state); + event.setError(error); + listener.stateChanged(event); } } @@ -174,26 +176,26 @@ // Start using the line for recording dataLine.start(); - setState(DeviceState.READY); + setState(DeviceState.READY, null); if (logger.isInfoEnabled()) { logger.info("Audio line is ready"); } } catch (IllegalArgumentException e) { - setState(DeviceState.NO_DEVICE); + setState(DeviceState.NO_DEVICE, null); throw new DeviceTechnicalException(this, "Can't open audio device", e); } catch (IllegalStateException e) { - setState(DeviceState.NO_DEVICE); + setState(DeviceState.NO_DEVICE, null); throw new DeviceTechnicalException(this, "Can't open audio device", e); } catch (SecurityException e) { - setState(DeviceState.NO_DEVICE); + setState(DeviceState.NO_DEVICE, null); throw new DeviceTechnicalException(this, "Can't open audio device", e); } catch (LineUnavailableException e) { - setState(DeviceState.NO_DEVICE); + setState(DeviceState.NO_DEVICE, null); throw new DeviceTechnicalException(this, "Can't open audio device", e); } } @@ -214,9 +216,9 @@ } @Override - public void record(File outputFile, long delaySeconds) throws IOException { + public void record(File outputFile, long delaySeconds) { - if (DeviceState.NO_DATA == state) { + if (DeviceState.NO_DEVICE == state) { if (logger.isWarnEnabled()) { logger.warn("Can't record " + outputFile.getAbsolutePath() + ", no available dataLine"); } @@ -231,37 +233,45 @@ "You must start the AudioRecorder to initialize " + "the audio line before call record method"); + try { + // Start recorder1 + if (currentRecorder == null) { + recorder1 = new Recorder(outputFile, this, audioFormat, lineReader); + currentRecorder = recorder1; - // Start recorder1 - if (currentRecorder == null) { - recorder1 = new Recorder(outputFile, audioFormat, outputType, lineReader); - currentRecorder = recorder1; + // Stop recorder1 if recording and start recorder2 + } else if (currentRecorder == recorder1) { - // Stop recorder1 if recording and start recorder2 - } else if (currentRecorder == recorder1) { + if (recorder1.isRecording()) { + recorder1.stop(delaySeconds); + } - if (recorder1.isRecording()) { - recorder1.stop(delaySeconds); - } + if (recorder2 != null && recorder2.isRecording()) { + recorder2.stop(); + } + recorder2 = new Recorder(outputFile, this, audioFormat, lineReader); + currentRecorder = recorder2; - if (recorder2 != null && recorder2.isRecording()) { - recorder2.stop(); - } - recorder2 = new Recorder(outputFile, audioFormat, outputType, lineReader); - currentRecorder = recorder2; + // Stop recorder2 if recording and start recorder1 + } else if (currentRecorder == recorder2) { - // Stop recorder2 if recording and start recorder1 - } else if (currentRecorder == recorder2) { + if (recorder2.isRecording()) { + recorder2.stop(delaySeconds); + } - if (recorder2.isRecording()) { - recorder2.stop(delaySeconds); + if (recorder1.isRecording()) { + recorder1.stop(); + } + recorder1 = new Recorder(outputFile, this, audioFormat, lineReader); + currentRecorder = recorder1; } - if (recorder1.isRecording()) { - recorder1.stop(); - } - recorder1 = new Recorder(outputFile, audioFormat, outputType, lineReader); - currentRecorder = recorder1; + } catch (IOException e) { + setState(DeviceState.ERROR, + new DeviceTechnicalException(this, + "Error on saving file " + + outputFile.getAbsolutePath(), e) + ); } } @@ -301,7 +311,7 @@ dataLine.close(); dataLine = null; - setState(DeviceState.NO_DEVICE); + setState(DeviceState.NO_DEVICE, null); } } @@ -331,7 +341,7 @@ if (!recorders.isEmpty()) { - setState(DeviceState.RECORDING); + setState(DeviceState.RECORDING, null); numBytesRead = dataLine.read(buffer, 0, bufferSize); synchronized (recorders) { @@ -341,7 +351,7 @@ } } else { - setState(DeviceState.READY); + setState(DeviceState.READY, null); } } @@ -359,10 +369,10 @@ protected static class Recorder { + protected AudioRecorderDefault audioRecorder; + protected AudioFormat audioFormat; - protected AudioFileFormat.Type outputType; - protected ByteArrayOutputStream bufferStream; protected String outputFilePath; @@ -396,8 +406,8 @@ } public Recorder(File outputFile, + AudioRecorderDefault audioRecorder, AudioFormat audioFormat, - AudioFileFormat.Type outputType, DataLineReader lineReader) throws IOException { this.outputFilePath = outputFile.getAbsolutePath(); @@ -407,10 +417,10 @@ } else { logger.info("Use existing file '{}' to continue recording", outputFilePath); } + this.outputStream = new BufferedOutputStream(new FileOutputStream(outputFile, true)); this.bufferStream = new ByteArrayOutputStream(); - this.outputStream = new BufferedOutputStream(new FileOutputStream(outputFile, true)); this.audioFormat = audioFormat; - this.outputType = outputType; + this.audioRecorder = audioRecorder; this.lineReader = lineReader; this.lineReader.addRecorder(this); @@ -500,10 +510,13 @@ try { logger.debug("Save in file {}", outputFilePath); - AudioSystem.write(audioStream, outputType, outputStream); + AudioSystem.write(audioStream, audioRecorder.getOutputType(), outputStream); } catch (IOException e) { logger.error("Can't record file {}", outputFilePath, e); + audioRecorder.setState(DeviceState.ERROR, + new DeviceTechnicalException(audioRecorder, + "Error on saving file " + outputFilePath, e)); } finally { try { Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioRecorderMock.java 2012-08-08 18:26:33 UTC (rev 373) @@ -30,7 +30,6 @@ import javax.sound.sampled.AudioFileFormat; import java.io.File; -import java.io.IOException; import java.util.Set; /** @@ -63,7 +62,7 @@ } @Override - public void record(File outputFile, long delaySeconds) throws IOException { + public void record(File outputFile, long delaySeconds) { // do nothing } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/BaseGpsHandler.java 2012-08-08 18:26:33 UTC (rev 373) @@ -67,7 +67,7 @@ /** * Value to check the number of timer update failures before the DeviceState - * becomes {@link DeviceState#NO_DATA} + * becomes {@link DeviceState#ERROR} */ protected int nbFailuresMax; @@ -101,8 +101,8 @@ if (getState() == DeviceState.READY) { if (logger.isDebugEnabled()) { - logger.debug("Start scheduling GpsHandler every " - + periodMilliseconds + " milliseconds"); + logger.debug("Start scheduling GpsHandler to retrieve data every " + + config.getCheckPeriod() + " seconds"); } timer = new Timer(); @@ -151,12 +151,15 @@ return gpsLocationListeners; } - protected void setState(DeviceState state) { + public void setState(DeviceState state, DeviceTechnicalException error) { DeviceState oldValue = getState(); this.state = state; + // Fire on listeners for (DeviceStateListener listener : deviceStateListeners) { - listener.stateChanged(new DeviceStateEvent(this, oldValue, state)); + DeviceStateEvent event = new DeviceStateEvent(this, oldValue, state); + event.setError(error); + listener.stateChanged(event); } } @@ -175,12 +178,14 @@ } catch (DeviceTechnicalException ex) { - // We use NO_DATA, because this task is during start - setState(DeviceState.NO_DATA); + // We use ERROR, because this task is during start + // Error is generally the same as previous one from first open() call, + // no need to propagate it + setState(DeviceState.ERROR, null); if (logger.isErrorEnabled()) { logger.error("Can't open GPS device. Try again in " - + this.scheduledExecutionTime() + " milliseconds", ex); + + config.getCheckPeriod() + " seconds", ex); } } } @@ -208,12 +213,19 @@ // Data is unavailable if (location == null && nbFailures >= nbFailuresMax) { - setState(DeviceState.NO_DATA); + setState(DeviceState.ERROR, + new DeviceTechnicalException(BaseGpsHandler.this, + String.format("The GPS signal is lost after %d seconds ! " + + "The application will try again in %d seconds", + config.getTimeout(), + config.getCheckPeriod()) + ) + ); // GPS is recording } else { - setState(DeviceState.RECORDING); + setState(DeviceState.RECORDING, null); // Fire events for location change for (GpsLocationListener listener : gpsLocationListeners) { Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/FakeGpsHandler.java 2012-08-08 18:26:33 UTC (rev 373) @@ -73,7 +73,7 @@ // } else { // if (started) { // if (r.nextInt(32) > 25) { -// newState = DeviceState.NO_DATA; +// newState = DeviceState.ERROR; // } else { // newState = DeviceState.RECORDING; // } @@ -94,7 +94,7 @@ @Override public void open() throws DeviceTechnicalException { - setState(DeviceState.READY); + setState(DeviceState.READY, null); } @Override @@ -108,7 +108,7 @@ @Override public void close() throws DeviceTechnicalException { - setState(DeviceState.NO_DEVICE); + setState(DeviceState.NO_DEVICE, null); } @Override Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsConfig.java 2012-08-08 18:26:33 UTC (rev 373) @@ -111,7 +111,7 @@ "2", Integer.class ), - /** Time in seconds before timeout (NO_DATA, NO_DEVICE) */ + /** Time in seconds before timeout (ERROR, NO_DEVICE) */ GPS_TIMEOUT("gps.timeout", n_("sammoa.config.gps.timeout"), "10", Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/gps/GpsHandlerGpsylon.java 2012-08-08 18:26:33 UTC (rev 373) @@ -127,18 +127,18 @@ logger.info("Connected to GPS device"); - setState(DeviceState.READY); + setState(DeviceState.READY, null); } catch (GPSException ex) { - setState(DeviceState.NO_DEVICE); + setState(DeviceState.NO_DEVICE, null); throw new DeviceTechnicalException(this, "Can't open GPS device", ex); } } @Override - public void close() { + public void close() throws DeviceTechnicalException { stop(); @@ -158,9 +158,10 @@ logger.info("GPS device is closed"); - setState(DeviceState.NO_DEVICE); + setState(DeviceState.NO_DEVICE, null); } catch (GPSException e) { + setState(DeviceState.ERROR, null); throw new DeviceTechnicalException(this, "Can't close GPS device", e); } } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerDefault.java 2012-08-08 18:26:33 UTC (rev 373) @@ -61,7 +61,6 @@ import org.slf4j.LoggerFactory; import java.io.File; -import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Date; @@ -787,11 +786,7 @@ File audioFile = new File(audioDir, fileName); - try { - getAudioRecorder().record(audioFile, delay); - } catch (IOException e) { - throw Throwables.propagate(e); - } + getAudioRecorder().record(audioFile, delay); } protected Date saveGPS(TopiaContext transaction, Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/map/ExportMapService.java 2012-08-08 18:26:33 UTC (rev 373) @@ -29,6 +29,7 @@ import com.bbn.openmap.dataAccess.shape.EsriShapeExport; import com.bbn.openmap.omGraphics.OMGraphic; import com.bbn.openmap.omGraphics.OMPoint; +import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; @@ -47,7 +48,6 @@ import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.Date; import java.util.List; import java.util.Map; @@ -106,6 +106,10 @@ } public void exportGeoPointsMap(ExportMapModel dataModel) { + Preconditions.checkNotNull(dataModel.getCampaign()); + Preconditions.checkNotNull(dataModel.getBeginDate()); + Preconditions.checkNotNull(dataModel.getEndDate()); + if (logger.isInfoEnabled()) { logger.info("Start GeoPointsMap export to " + dataModel.getExportDirectory() + "::" + @@ -134,9 +138,7 @@ List<Flight> campaignFlights = context.getFlightService().getFlights(dataModel.getCampaign()); // Filter on period - Date beginDate = dataModel.getBeginDate() == null ? campaign.getBeginDate() : dataModel.getBeginDate(); - Date endDate = dataModel.getEndDate() == null ? campaign.getEndDate() : dataModel.getEndDate(); - final PeriodDates period = new PeriodDates(beginDate, endDate); + final PeriodDates period = new PeriodDates(dataModel.getBeginDate(), dataModel.getEndDate()); Iterable<Flight> flights = Iterables.filter(campaignFlights, new Predicate<Flight>() { @Override Modified: trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java =================================================================== --- trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-application/src/test/java/fr/ulr/sammoa/application/map/ExportMapServiceTest.java 2012-08-08 18:26:33 UTC (rev 373) @@ -89,10 +89,10 @@ exportDirectory, "export-geoPoints.shp", campaign, + campaign.getBeginDate(), + campaign.getEndDate(), null, null, - null, - null, null ); Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/DeviceStateLED.java 2012-08-08 18:26:33 UTC (rev 373) @@ -56,10 +56,6 @@ protected DeviceState state; - public DeviceStateLED() { -// stateChanged(DeviceState.NO_DEVICE); - } - protected static final ImageIcon NO_DEVICE_ICON = Resource.getIcon("/icons/device/nodevice.png"); protected static final ImageIcon READY_ICON = Resource.getIcon("/icons/device/ready.png"); protected static final ImageIcon RECORDING_ICON = Resource.getIcon("/icons/device/recording.png"); @@ -67,13 +63,17 @@ @Override public void stateChanged(DeviceStateEvent event) { + setState(event.getNewValue()); + } + + public void setState(DeviceState state) { DeviceState oldValue = getState(); - this.state = event.getNewValue(); - + this.state = state; + if (oldValue != state) { logger.debug("[{}] Update LED status: {}", - getClass().getSimpleName(), state); + getClass().getSimpleName(), state); switch (state) { case NO_DEVICE: @@ -85,7 +85,7 @@ case RECORDING: setIcon(RECORDING_ICON); break; - case NO_DATA: + case ERROR: setIcon(NO_DATA_ICON); break; } Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightBarHandler.java 2012-08-08 18:26:33 UTC (rev 373) @@ -24,6 +24,8 @@ */ package fr.ulr.sammoa.ui.swing.flight; +import fr.ulr.sammoa.application.device.audio.AudioRecorder; +import fr.ulr.sammoa.application.device.gps.GpsHandler; import fr.ulr.sammoa.application.flightController.FlightState; import fr.ulr.sammoa.persistence.Route; import fr.ulr.sammoa.ui.swing.BaseHandler; @@ -53,9 +55,16 @@ public void init() { getFlightUIModel().addPropertyChangeListener(this); - getFlightController().getAudioRecorder().addDeviceStateListener(view.getAudioLED()); - getFlightController().getGpsHandler().addDeviceStateListener(view.getGpsLED()); - getFlightController().getGpsHandler().addGpsLocationListener(getModel()); + + AudioRecorder audioRecorder = getFlightController().getAudioRecorder(); + view.getAudioLED().setState(audioRecorder.getState()); + audioRecorder.addDeviceStateListener(view.getAudioLED()); + + GpsHandler gpsHandler = getFlightController().getGpsHandler(); + view.getGpsLED().setState(gpsHandler.getState()); + gpsHandler.addDeviceStateListener(view.getGpsLED()); + gpsHandler.addGpsLocationListener(getModel()); + if (FlightState.OFF_EFFORT.equals(getFlightUIModel().getFlightState())) { getModel().setEffortPanelColor(SammoaColors.ON_EFFORT_BACKGROUND_COLOR); } 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-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-08-08 18:26:33 UTC (rev 373) @@ -52,6 +52,9 @@ import fr.ulr.sammoa.application.ReferentialService; import fr.ulr.sammoa.application.SammoaConfig; import fr.ulr.sammoa.application.SammoaContext; +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 fr.ulr.sammoa.application.device.gps.GpsLocationEvent; import fr.ulr.sammoa.application.device.gps.GpsLocationListener; @@ -197,7 +200,7 @@ // TODO-fdesbois-2012-07-19 : load all this data in the same transaction // TODO-fdesbois-2012-07-19 : to avoid separated instances of same entities - // TODO-fdesbois-2012-07-19 : like Transect or ObserverPosition + // TODO-fdesbois-2012-07-19 : like ObserverPosition or use proper Model like TransectModel Flight flight = getFlightService().getFlight(flightId); Preconditions.checkNotNull(flight); Campaign campaign = flight.getCampaign(); @@ -235,19 +238,21 @@ try { flightController.openGpsDevice(getConfig().getGpsConfig()); } catch (DeviceTechnicalException ex) { - logger.error("Error on FlightController init", ex); + logger.error("Error on GPS init", ex); SammoaUtil.showError(ui, ex); } try { flightController.openAudioDevice(); } catch (DeviceTechnicalException ex) { - logger.error("Error on FlightController init", ex); + logger.error("Error on Audio init", ex); SammoaUtil.showError(ui, ex); } flightController.addListener(this); flightController.getGpsHandler().addGpsLocationListener(gpsLocationListener); + flightController.getGpsHandler().addDeviceStateListener(deviceStateListener); + flightController.getAudioRecorder().addDeviceStateListener(deviceStateListener); flightController.init(); @@ -872,6 +877,19 @@ } }; + protected DeviceStateListener deviceStateListener = new DeviceStateListener() { + + @Override + public void stateChanged(DeviceStateEvent event) { + if (event.getOldValue() != DeviceState.ERROR && + event.getNewValue() == DeviceState.ERROR && + event.getError() != null) { + + SammoaUtil.showError(ui, event.getError()); + } + } + }; + protected GpsLocationListener gpsLocationListener = new GpsLocationListener() { @Override Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/io/exportMap/ExportMapUIModel.java 2012-08-08 18:26:33 UTC (rev 373) @@ -317,12 +317,24 @@ List<Species> speciesToUse = Species2.getSelectedSpecies( getSpecies(), getSelectedSpecies(), getSelectedSpeciesTypes()); + // Ensure bounds for beginDate and enDate + Date beginDate = getBeginDate(); + Date campaignBeginDate = getSelectedCampaign().getBeginDate(); + if (beginDate == null || beginDate.before(campaignBeginDate)) { + beginDate = campaignBeginDate; + } + Date endDate = getEndDate(); + Date campaignEndDate = getSelectedCampaign().getEndDate(); + if (endDate == null || endDate.after(campaignEndDate)) { + endDate = campaignEndDate; + } + ExportMapModel result = ExportMapModel.newModel( getExportDirectory(), filename, getSelectedCampaign(), - getBeginDate(), - getEndDate(), + beginDate, + endDate, getSelectedStrates(), getSelectedRouteTypes(), speciesToUse 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-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/observations/EffortPanelHandler.java 2012-08-08 18:26:33 UTC (rev 373) @@ -552,7 +552,7 @@ @Override public void stateChanged(DeviceStateEvent event) { DeviceState state = event.getNewValue(); - if (DeviceState.NO_DATA == state) { + if (DeviceState.ERROR == state) { ui.getObservationTable().setBackground(DEVICE_ERROR_BACKGROUND_COLOR); } else { Modified: trunk/sammoa-ui-swing/src/main/resources/logback.xml =================================================================== --- trunk/sammoa-ui-swing/src/main/resources/logback.xml 2012-08-08 18:26:09 UTC (rev 372) +++ trunk/sammoa-ui-swing/src/main/resources/logback.xml 2012-08-08 18:26:33 UTC (rev 373) @@ -47,7 +47,7 @@ <!--</rollingPolicy>--> <!--</appender>--> - <logger name="fr.ulr.sammoa" level="DEBUG"/> + <logger name="fr.ulr.sammoa" level="INFO"/> <root level="ERROR"> <!--<appender-ref ref="FILE"/>-->
participants (1)
-
fdesbois@users.forge.codelutin.com