Author: fdesbois Date: 2012-09-05 18:05:45 +0200 (Wed, 05 Sep 2012) New Revision: 531 Url: http://forge.codelutin.com/repositories/revision/sammoa/531 Log: refs #1197 : some issue with getLocation Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlights.java 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-05 16:05:30 UTC (rev 530) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/flightController/FlightControllerValidation.java 2012-09-05 16:05:45 UTC (rev 531) @@ -25,7 +25,6 @@ import com.google.common.base.Objects; import com.google.common.base.Preconditions; -import com.google.common.collect.FluentIterable; import fr.ulr.sammoa.application.device.DeviceManager; import fr.ulr.sammoa.application.device.audio.AudioReader; import fr.ulr.sammoa.persistence.Dates; @@ -37,6 +36,7 @@ import fr.ulr.sammoa.persistence.Routes; import fr.ulr.sammoa.persistence.SammoaDAOHelper; import fr.ulr.sammoa.persistence.TransectFlight; +import fr.ulr.sammoa.persistence.TransectFlights; import org.joda.time.DateTime; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; @@ -81,12 +81,12 @@ @Override protected GeoPoint getLocation(TopiaContext tx) throws TopiaException { - Preconditions.checkNotNull(currentRoute, "You must set the current route to retrieve location"); + Preconditions.checkNotNull(currentTransect, "You must set the current transect to retrieve location"); Preconditions.checkState(!geoPoints.isEmpty(), "No geoPoints available"); GeoPoint result; - DateTime previousTime = Dates.toDateTime(currentRoute.getBeginTime()); + DateTime previousTime = TransectFlights.getStartTime(currentTransect, routes); int position = (int) getAudioReader().getPosition() / 1000; @@ -115,6 +115,12 @@ GeoPoint location = GeoPoints.getClosestPoint(geoPoints, newTime.toDate()); DateTime locationTime = Dates.toDateTime(location.getRecordTime()); + if (logger.isDebugEnabled()) { + logger.debug(String.format("Find locationTime %1$tH:%1$tM:%1$tS.%1$tL", + locationTime.toDate()) + ); + } + // Create a new location if no one is available for the newTime if (!locationTime.equals(newTime)) { @@ -179,13 +185,8 @@ if (file.exists()) { - Route firstRoute = FluentIterable - .from(routes) - .filter(Routes.withTransectFlight(newValue)) - .first() - .orNull(); - - audioReader.load(file, firstRoute.getBeginTime()); + DateTime startTime = TransectFlights.getStartTime(currentTransect, routes); + audioReader.load(file, startTime.toDate()); } } } Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java 2012-09-05 16:05:30 UTC (rev 530) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/GeoPoints.java 2012-09-05 16:05:45 UTC (rev 531) @@ -30,6 +30,7 @@ import com.google.common.collect.FluentIterable; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; +import org.joda.time.Interval; import java.util.Comparator; import java.util.Date; @@ -133,9 +134,11 @@ int nextIndex = index + 1; if (nextIndex < size) { + Date begin = source.get(index); Date end = source.get(nextIndex); + Interval interval = Dates.toInterval(begin, end); - if (date.before(end)) { + if (interval.contains(Dates.toDateTime(date))) { return index; } 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-09-05 16:05:30 UTC (rev 530) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/Routes.java 2012-09-05 16:05:45 UTC (rev 531) @@ -69,6 +69,10 @@ return Iterables.transform(routes, TO_DATE_FUNCTION); } + public static Function<Route, Date> toDate() { + return TO_DATE_FUNCTION; + } + public static Set<ObserverPosition> toObserverPositions(Iterable<Route> routes) { Set<ObserverPosition> result = Sets.newHashSet(); for (Route route : routes) { Modified: trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlights.java =================================================================== --- trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlights.java 2012-09-05 16:05:30 UTC (rev 530) +++ trunk/sammoa-persistence/src/main/java/fr/ulr/sammoa/persistence/TransectFlights.java 2012-09-05 16:05:45 UTC (rev 531) @@ -27,8 +27,10 @@ import com.google.common.base.Predicate; import com.google.common.collect.FluentIterable; import com.google.common.collect.Sets; +import org.joda.time.DateTime; import org.nuiton.validator.bean.list.BeanListValidator; +import java.util.Date; import java.util.Set; /** @@ -42,6 +44,25 @@ // static class do not have instanciation } + /** + * Retrieve the start time of the given {@code transectFlight} based on + * {@code routes}. Actually, the start time value is the first {@code transectFlight} + * route {@code beginTime}. + * + * @param transectFlight TransectFlight + * @param routes Collection of routes + * @return the transectFlight start time + */ + public static DateTime getStartTime(TransectFlight transectFlight, Iterable<Route> routes) { + Date result = FluentIterable + .from(routes) + .filter(Routes.withTransectFlight(transectFlight)) + .first() + .transform(Routes.toDate()) + .get(); + return Dates.toDateTime(result); + } + public static Set<ObserverPosition> toObserverPositions(Iterable<TransectFlight> transectFlights) { Set<ObserverPosition> result = Sets.newHashSet(); for (TransectFlight transectFlight : transectFlights) {