X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=gps%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fgps%2Ftrack%2FFilteredTrack.java;fp=gps%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fgps%2Ftrack%2FFilteredTrack.java;h=ddcaa4964adb40b09098e8f8d3060948dd68af77;hb=47fdbaa9f2527531947249ad605845f25056b587;hp=0000000000000000000000000000000000000000;hpb=698d0d066b8cc06d28c3cc9160ed0d897ac44606;p=utils diff --git a/gps/src/main/java/org/wamblee/gps/track/FilteredTrack.java b/gps/src/main/java/org/wamblee/gps/track/FilteredTrack.java new file mode 100644 index 00000000..ddcaa496 --- /dev/null +++ b/gps/src/main/java/org/wamblee/gps/track/FilteredTrack.java @@ -0,0 +1,63 @@ +package org.wamblee.gps.track; + +import java.util.List; + +import org.wamblee.gps.geometry.Point; + +/** + * Filtered track provides a filtered view on a track. + * Changes in the filter are also represented by the filtered track. + */ +public class FilteredTrack implements Track { + + private TrackFilter _filter; + private Track _originalTrack; + private Track _filteredTrack; + private int _lastVersion; + + public FilteredTrack(TrackFilter aFilter, Track aTrack) { + _filter = aFilter; + _originalTrack = aTrack; + _filteredTrack = _filter.filter(_originalTrack); + _lastVersion = aFilter.version(); + } + + private Track getTrack() { + if ( _lastVersion != _filter.version()) { + _filteredTrack = _filter.filter(_originalTrack); + _lastVersion = _filter.version(); + } + return _filteredTrack; + } + + @Override + public List getSegments() { + return getTrack().getSegments(); + } + + @Override + public String getDescription() { + return getTrack().getDescription(); + } + + @Override + public double getMaxCoordinate(int aI) { + return getTrack().getMaxCoordinate(aI); + } + + @Override + public double getMinCoordinate(int aI) { + return getTrack().getMinCoordinate(aI); + } + + @Override + public Point getPoint(int aIndex) { + return getTrack().getPoint(aIndex); + } + + @Override + public int size() { + return getTrack().size(); + } + +}