/* Copyright (C) 2001, 2006 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. */ package gov.nasa.worldwind.tracks; import gov.nasa.worldwind.util.Logging; import java.util.NoSuchElementException; /** * @author tag * @version $Id$ */ public class TrackPointIteratorImpl implements TrackPointIterator { private Iterable<Track> trackIterable; private java.util.Iterator<Track> tracks; private java.util.Iterator<TrackSegment> segments; private java.util.Iterator<TrackPoint> positions; public TrackPointIteratorImpl(Iterable<Track> trackIterable) { this.trackIterable = trackIterable; this.reset(); } public TrackPointIteratorImpl reset() { if (this.trackIterable == null) { String msg = Logging.getMessage("nullValue.TracksIsNull"); Logging.logger().severe(msg); throw new IllegalArgumentException(msg); } this.tracks = this.trackIterable.iterator(); this.segments = null; this.positions = null; this.loadNextPositions(); return this; } public boolean hasNext() { if (this.positions != null && this.positions.hasNext()) return true; this.loadNextPositions(); return (this.positions != null && this.positions.hasNext()); } private void loadNextPositions() { if (this.segments != null && this.segments.hasNext()) { TrackSegment segment = this.segments.next(); this.positions = segment.getPoints().iterator(); return; } if (this.tracks.hasNext()) { Track track = this.tracks.next(); this.segments = track.getSegments().iterator(); this.loadNextPositions(); } } public TrackPoint next() { if (!this.hasNext()) { String msg = Logging.getMessage("TrackPointIterator.NoMoreTrackPoints"); Logging.logger().severe(msg); throw new NoSuchElementException(msg); } return this.positions.next(); } public void remove() { String msg = Logging.getMessage("TrackPointIterator.RemoveNotSupported"); Logging.logger().severe(msg); throw new UnsupportedOperationException(msg); } public int getNumPoints() { int numPoints; for (numPoints = 0; this.hasNext(); this.next()) ++numPoints; return numPoints; } }