/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2008-2014, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.data.wfs; import java.io.IOException; import java.util.NoSuchElementException; import org.geotools.data.FeatureReader; import org.geotools.data.wfs.internal.GetFeatureParser; import org.geotools.data.wfs.internal.parsers.EmfAppSchemaParser; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.FeatureType; /** * Adapts a {@link GetFeatureParser} to the geotools {@link FeatureReader} interface, being the base * for all the data content related implementations in the WFS module. */ class WFSFeatureReader implements FeatureReader<SimpleFeatureType, SimpleFeature> { private SimpleFeature next; private GetFeatureParser parser; private SimpleFeatureType featureType; public WFSFeatureReader(final GetFeatureParser parser) throws IOException { this.parser = parser; this.next = parser.parse(); if (this.next != null) { FeatureType parsedType = next.getFeatureType(); if (parsedType instanceof SimpleFeatureType) { this.featureType = (SimpleFeatureType) parsedType; } else { // this is the FeatureType as parsed by the StreamingParser, we need a simple view this.featureType = EmfAppSchemaParser.toSimpleFeatureType(parsedType); } } } /** * @see FeatureReader#close() */ public void close() throws IOException { final GetFeatureParser parser = this.parser; this.parser = null; this.next = null; if (parser != null) { parser.close(); } } /** * @see FeatureReader#getFeatureType() */ public SimpleFeatureType getFeatureType() { if (featureType == null) { throw new IllegalStateException( "No features were retrieved, shouldn't be calling getFeatureType()"); } return featureType; } /** * @see FeatureReader#hasNext() */ public boolean hasNext() throws IOException { return next != null; } /** * @see FeatureReader#next() */ public SimpleFeature next() throws IOException, NoSuchElementException { if (this.next == null) { throw new NoSuchElementException(); } SimpleFeature current = this.next; this.next = parser.parse(); return current; } }