(no commit message)
[utils] / gps / src / main / java / org / wamblee / gps / track / FilteredTrack.java
1 package org.wamblee.gps.track;
2
3 import java.io.Serializable;
4 import java.util.List;
5
6 import org.wamblee.gps.geometry.Point;
7
8 /**
9  * Filtered track provides a filtered view on a track. 
10  * Changes in the filter are also represented by the filtered track. 
11  */
12 public class FilteredTrack implements Track, Serializable {
13     
14     private TrackFilter _filter; 
15     private Track _originalTrack;
16     private Track _filteredTrack; 
17     private int _lastVersion; 
18     
19     public FilteredTrack(TrackFilter aFilter, Track aTrack) { 
20         _filter = aFilter; 
21         _originalTrack = aTrack;
22         _filteredTrack = _filter.filter(_originalTrack);
23         _lastVersion = aFilter.version();
24     }
25     
26     private Track getTrack() { 
27         if ( _lastVersion != _filter.version()) { 
28             _filteredTrack = _filter.filter(_originalTrack);
29             _lastVersion = _filter.version();
30         }
31         return _filteredTrack;
32     }
33     
34     @Override
35     public List<TrackSegment> getSegments() {
36         return getTrack().getSegments();
37     }
38
39     @Override
40     public String getDescription() {
41         return getTrack().getDescription();
42     }
43
44     @Override
45     public double getMaxCoordinate(int aI) {
46         return getTrack().getMaxCoordinate(aI);
47     }
48
49     @Override
50     public double getMinCoordinate(int aI) {
51         return getTrack().getMinCoordinate(aI);
52     }
53
54     @Override
55     public Point getPoint(int aIndex) {
56         return getTrack().getPoint(aIndex);
57     }
58
59     @Override
60     public int size() {
61         return getTrack().size();
62     }
63
64 }