r538 - in trunk: sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/bar sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util
Author: fdesbois Date: 2012-09-06 11:24:51 +0200 (Thu, 06 Sep 2012) New Revision: 538 Url: http://forge.codelutin.com/repositories/revision/sammoa/538 Log: refs #1412 : add positionDate management in AudioReader + resolve issue with TRANSIT route Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReader.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReaderMock.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioReader.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.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/bar/SoundPlayer.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/EffortPanelHandler.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/device/audio/AudioReader.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReader.java 2012-09-06 09:23:15 UTC (rev 537) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReader.java 2012-09-06 09:24:51 UTC (rev 538) @@ -53,10 +53,10 @@ long getLength(); /** - * @return the recording date of the loaded file or null if not provided or + * @return the start date of the loaded file or null if not provided or * no file is loaded */ - Date getRecordingDate(); + Date getStartDate(); /** @param position current audio position in milliseconds to set */ void setPosition(long position); @@ -64,6 +64,10 @@ /** @return current audio position in milliseconds */ long getPosition(); + void setPositionDate(Date date); + + Date getPositionDate(); + void addAudioPositionListener(AudioPositionListener listener); void removeAudioPositionListener(AudioPositionListener listener); Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReaderMock.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReaderMock.java 2012-09-06 09:23:15 UTC (rev 537) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioReaderMock.java 2012-09-06 09:24:51 UTC (rev 538) @@ -81,7 +81,7 @@ } @Override - public Date getRecordingDate() { + public Date getStartDate() { return null; } @@ -96,6 +96,15 @@ } @Override + public void setPositionDate(Date date) { + } + + @Override + public Date getPositionDate() { + return null; + } + + @Override public void open() throws DeviceTechnicalException { // no state set here, only open device and throw error } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioReader.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioReader.java 2012-09-06 09:23:15 UTC (rev 537) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioReader.java 2012-09-06 09:24:51 UTC (rev 538) @@ -28,6 +28,7 @@ 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.persistence.Dates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,7 +69,7 @@ protected long audioLength; // Length of the sound. protected long audioPosition = 0; // Current position within the sound - protected Date recordingDate; + protected Date startDate; protected DeviceState state = DeviceState.UNAVAILABLE; @@ -184,7 +185,7 @@ for (AudioPositionListener l : audioPositionListener) { l.audioChanged(this, audioLength); } - this.recordingDate = recordingDate; + this.startDate = recordingDate; setState(DeviceState.READY); logger.debug(String.format("Sound file '%s' loaded", file)); @@ -202,7 +203,9 @@ clip.close(); clip = null; } - recordingDate = null; + startDate = null; + audioLength = 0; + audioPosition = 0; setState(DeviceState.UNAVAILABLE); } @@ -212,8 +215,8 @@ } @Override - public Date getRecordingDate() { - return recordingDate; + public Date getStartDate() { + return startDate; } @Override @@ -240,6 +243,41 @@ } @Override + public void setPositionDate(Date date) { + Preconditions.checkNotNull(date); + + if (startDate != null) { + long duration = Dates + .toInterval(startDate, date) + .toDuration() + .getMillis(); + + setPosition(duration); + + } else { + if (logger.isWarnEnabled()) { + logger.warn("StartDate is not defined, you can't set the " + + "position date {}", date); + } + } + } + + @Override + public Date getPositionDate() { + Date result; + if (startDate == null) { + result = null; + + } else { + result = Dates + .toDateTime(startDate) + .plus(audioPosition) + .toDate(); + } + return result; + } + + @Override public void open() throws DeviceTechnicalException { // no state set here, only open device and throw error } Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java 2012-09-06 09:23:15 UTC (rev 537) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java 2012-09-06 09:24:51 UTC (rev 538) @@ -82,24 +82,28 @@ @Override protected GeoPoint getLocation(TopiaContext tx) throws TopiaException { - Preconditions.checkNotNull(currentTransect, "You must set the current transect to retrieve location"); + Preconditions.checkNotNull(currentRoute, "You must set the current route to retrieve location"); Preconditions.checkState(!geoPoints.isEmpty(), "No geoPoints available"); GeoPoint result; - DateTime startTime = Dates.toDateTime(getAudioReader().getRecordingDate()); - - long position = getAudioReader().getPosition(); - if (logger.isDebugEnabled()) { logger.debug(String.format("Get location after startTime %1$tH:%1$tM:%1$tS.%1$tL (audio position = %2$d)", - startTime.toDate(), - position) + getAudioReader().getStartDate(), + getAudioReader().getPosition()) ); } - DateTime newTime = startTime.plus(position).withMillisOfSecond(0); + Date positionDate = getAudioReader().getPositionDate(); + DateTime newTime; + if (positionDate == null) { + newTime = Dates.toDateTime(currentRoute.getBeginTime()); + + } else { + newTime = Dates.toDateTime(positionDate).withMillisOfSecond(0); + } + if (logger.isDebugEnabled()) { logger.debug(String.format("Get location at newTime %1$tH:%1$tM:%1$tS.%1$tL", newTime.toDate()) 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-09-06 09:23:15 UTC (rev 537) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/FlightUIHandler.java 2012-09-06 09:24:51 UTC (rev 538) @@ -488,6 +488,10 @@ int index = TransectFlightModel.indexOfTransectFlight( getModel().getTransectFlights(), route.getTransectFlight()); SammoaUtil.selectTableRow(ui.getTransectTable(), index); + + // for TRANSIT/CIRCLE_BACK route, we unselect all the table + } else { + SammoaUtil.unselectAll(ui.getTransectTable()); } transectFlightSelectionIsAdjusting = false; Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/bar/SoundPlayer.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/bar/SoundPlayer.java 2012-09-06 09:23:15 UTC (rev 537) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/bar/SoundPlayer.java 2012-09-06 09:24:51 UTC (rev 538) @@ -6,6 +6,8 @@ import fr.ulr.sammoa.application.device.audio.AudioPositionListener; import fr.ulr.sammoa.application.device.audio.AudioReader; import fr.ulr.sammoa.application.device.audio.SammoaAudioReader; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.FastDateFormat; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; @@ -26,9 +28,6 @@ import java.io.IOException; import java.util.Date; import java.util.Hashtable; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.time.DateUtils; -import org.apache.commons.lang3.time.FastDateFormat; /** * Composant qui permet de charge un fichier audio et de le jouer. On peut se @@ -188,7 +187,7 @@ * On met a la seconde dans le slider */ protected void changeSliderInfo() { - Date date = getAudioReader().getRecordingDate(); + Date date = getAudioReader().getStartDate(); long start = date.getTime(); long audioLength = getAudioReader().getLength(); Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/EffortPanelHandler.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/EffortPanelHandler.java 2012-09-06 09:23:15 UTC (rev 537) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/flight/effort/EffortPanelHandler.java 2012-09-06 09:24:51 UTC (rev 538) @@ -31,6 +31,7 @@ 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.audio.AudioReader; import fr.ulr.sammoa.application.device.audio.AudioRecorder; import fr.ulr.sammoa.application.device.gps.GpsHandler; import fr.ulr.sammoa.application.flightController.FlightController; @@ -371,6 +372,11 @@ // no unselect but ensure valid button (a select will cause a loop) getModel().setObservationEditBean(null); + + // Set audio position + if (route != null) { + setAudioReaderPositionDate(route.getBeginTime()); + } } } ); @@ -573,6 +579,9 @@ observationTimeChangeListener); selectRouteByObservation(newValue); + + // Set audio position + setAudioReaderPositionDate(newValue.getObservationTime()); } } }); @@ -790,6 +799,14 @@ return getModel().isValidationMode() ? "validation" : "onBoard"; } + protected void setAudioReaderPositionDate(Date date) { + FlightController flightController = getParentUI().getHandler().getFlightController(); + AudioReader audioReader = flightController.getDeviceManager(AudioReader.class); + if (audioReader.getState() == DeviceState.READY) { + audioReader.setPositionDate(date); + } + } + protected void fireObservationsUpdated(Route route, boolean scrollToFirst) { Iterable<Observation> observations = Observations.filterInRoute( 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-09-06 09:23:15 UTC (rev 537) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/util/SammoaUtil.java 2012-09-06 09:24:51 UTC (rev 538) @@ -110,6 +110,13 @@ table.setRowSelectionInterval(viewIndex, viewIndex); } + public static void unselectAll(JTable table) { + int size = table.getRowCount(); + if (size > 0) { + table.removeRowSelectionInterval(0, size - 1); + } + } + public static int getLastSelectedTableRow(JTable table) { int result; int nbRows = table.getSelectedRows().length;
participants (1)
-
fdesbois@users.forge.codelutin.com