sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1750175 - in /sis/branches/JDK8: core/sis-utility/src/main/java/org/apache/sis/internal/system/ storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ storage/sis-storage/src/main/java/org/apache/sis/storage/ storage/sis-xmlsto...
Date Sat, 25 Jun 2016 00:30:34 GMT
Author: desruisseaux
Date: Sat Jun 25 00:30:30 2016
New Revision: 1750175

URL: http://svn.apache.org/viewvc?rev=1750175&view=rev
Log:
Begin refactoring of GPX reader. The intend is to have it as a DataStore subclass.

Added:
    sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/XMLStoreProvider.java   (with props)
    sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/package-info.java   (with props)
Removed:
    sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/AbstractConfigurable.java
Modified:
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/system/XMLInputFactory.java
    sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/IOUtilities.java
    sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStore.java
    sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/gpx/GPXReader.java
    sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/StaxStreamReader.java
    sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/StaxStreamWriter.java
    sis/branches/JDK8/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/gpx/GPXReaderTest.java
    sis/branches/JDK8/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/gpx/GPXWriterTest.java

Modified: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/system/XMLInputFactory.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/system/XMLInputFactory.java?rev=1750175&r1=1750174&r2=1750175&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/system/XMLInputFactory.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/system/XMLInputFactory.java [UTF-8] Sat Jun 25 00:30:30 2016
@@ -37,7 +37,7 @@ import org.apache.sis.util.Static;
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.4
- * @version 0.4
+ * @version 0.8
  * @module
  */
 public final class XMLInputFactory extends Static {
@@ -52,6 +52,31 @@ public final class XMLInputFactory exten
     private XMLInputFactory() {
     }
 
+    /**
+     * Creates a new reader for the given object. The given object should be one of the types
+     * expected by a {@code createXMLStreamReader(…)} method defined in this class.
+     *
+     * <p>Note that this method does <strong>not</strong> open streams from files, paths or URLs.
+     * Creating input streams and closing them after usage are caller's responsibility.</p>
+     *
+     * @param  in where to read from.
+     * @return the reader, or {@code null} if the given file where not recognized.
+     * @throws XMLStreamException if the type of the given input is one recognized types,
+     *         but despite that the reader can not be created.
+     *
+     * @since 0.8
+     */
+    public static XMLStreamReader createFromAny(final Object in) throws XMLStreamException {
+        if (in instanceof XMLStreamReader) return                      ((XMLStreamReader) in);
+        if (in instanceof XMLEventReader)  return createXMLStreamReader((XMLEventReader)  in);
+        if (in instanceof InputSource)     return createXMLStreamReader((InputSource)     in);
+        if (in instanceof InputStream)     return createXMLStreamReader((InputStream)     in);
+        if (in instanceof Reader)          return createXMLStreamReader((Reader)          in);
+        if (in instanceof Source)          return createXMLStreamReader((Source)          in);
+        if (in instanceof Node)            return createXMLStreamReader((Node)            in);
+        return null;
+    }
+
     /*
      * Do not provide convenience method for java.io.File, because the caller needs to close the created
      * input stream himself (this is not done by XMLInputFactory.close(), despite its method name).
@@ -60,9 +85,9 @@ public final class XMLInputFactory exten
     /**
      * Creates a new reader for the given stream.
      *
-     * @param  in Where to read from.
-     * @return The reader.
-     * @throws XMLStreamException If the reader can not be created.
+     * @param  in where to read from.
+     * @return the reader.
+     * @throws XMLStreamException if the reader can not be created.
      */
     public static XMLStreamReader createXMLStreamReader(final InputStream in) throws XMLStreamException {
         return FACTORY.createXMLStreamReader(in);
@@ -71,9 +96,9 @@ public final class XMLInputFactory exten
     /**
      * Creates a new reader for the given stream.
      *
-     * @param  in Where to read from.
-     * @return The reader.
-     * @throws XMLStreamException If the reader can not be created.
+     * @param  in where to read from.
+     * @return the reader.
+     * @throws XMLStreamException if the reader can not be created.
      */
     public static XMLStreamReader createXMLStreamReader(final Reader in) throws XMLStreamException {
         return FACTORY.createXMLStreamReader(in);
@@ -82,9 +107,9 @@ public final class XMLInputFactory exten
     /**
      * Creates a new reader for the given source.
      *
-     * @param  in Where to read from.
-     * @return The reader.
-     * @throws XMLStreamException If the reader can not be created.
+     * @param  in where to read from.
+     * @return the reader.
+     * @throws XMLStreamException if the reader can not be created.
      */
     public static XMLStreamReader createXMLStreamReader(final InputSource in) throws XMLStreamException {
         return FACTORY.createXMLStreamReader(new SAXSource(in));
@@ -93,9 +118,9 @@ public final class XMLInputFactory exten
     /**
      * Creates a new reader for the given source.
      *
-     * @param  in Where to read from.
-     * @return The reader.
-     * @throws XMLStreamException If the reader can not be created.
+     * @param  in where to read from.
+     * @return the reader.
+     * @throws XMLStreamException if the reader can not be created.
      */
     public static XMLStreamReader createXMLStreamReader(final XMLEventReader in) throws XMLStreamException {
         return FACTORY.createXMLStreamReader(new StAXSource(in));
@@ -104,9 +129,9 @@ public final class XMLInputFactory exten
     /**
      * Creates a new reader for the given source.
      *
-     * @param  in Where to read from.
-     * @return The reader.
-     * @throws XMLStreamException If the reader can not be created.
+     * @param  in where to read from.
+     * @return the reader.
+     * @throws XMLStreamException if the reader can not be created.
      */
     public static XMLStreamReader createXMLStreamReader(final Node in) throws XMLStreamException {
         return FACTORY.createXMLStreamReader(new DOMSource(in));
@@ -115,9 +140,9 @@ public final class XMLInputFactory exten
     /**
      * Creates a new reader for the given source.
      *
-     * @param  in Where to read from.
-     * @return The reader.
-     * @throws XMLStreamException If the reader can not be created.
+     * @param  in where to read from.
+     * @return the reader.
+     * @throws XMLStreamException if the reader can not be created.
      */
     public static XMLStreamReader createXMLStreamReader(final Source in) throws XMLStreamException {
         return FACTORY.createXMLStreamReader(in);

Modified: sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/IOUtilities.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/IOUtilities.java?rev=1750175&r1=1750174&r2=1750175&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/IOUtilities.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/IOUtilities.java [UTF-8] Sat Jun 25 00:30:30 2016
@@ -442,7 +442,7 @@ public final class IOUtilities extends S
          */
         final Set<OpenOption> optionSet;
         if (options == null || options.length == 0) {
-            optionSet = Collections.emptySet();
+            optionSet = Collections.singleton(StandardOpenOption.READ);
         } else {
             optionSet = new HashSet<>(Arrays.asList(options));
             optionSet.add(StandardOpenOption.READ);

Modified: sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStore.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStore.java?rev=1750175&r1=1750174&r2=1750175&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStore.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStore.java [UTF-8] Sat Jun 25 00:30:30 2016
@@ -90,7 +90,7 @@ public abstract class DataStore implemen
      * or distributor, data quality, update frequency, usage constraints and more.
      *
      * @return Information about the dataset, or {@code null} if none.
-     * @throws DataStoreException If an error occurred while reading the data.
+     * @throws DataStoreException if an error occurred while reading the data.
      */
     public abstract Metadata getMetadata() throws DataStoreException;
 
@@ -118,7 +118,7 @@ public abstract class DataStore implemen
      * }
      *
      * @param  listener The listener to add.
-     * @throws IllegalArgumentException If the given listener is already registered in this data store.
+     * @throws IllegalArgumentException if the given listener is already registered in this data store.
      */
     public void addWarningListener(final WarningListener<? super DataStore> listener)
             throws IllegalArgumentException
@@ -130,7 +130,7 @@ public abstract class DataStore implemen
      * Removes a previously registered listener.
      *
      * @param  listener The listener to remove.
-     * @throws NoSuchElementException If the given listener is not registered in this data store.
+     * @throws NoSuchElementException if the given listener is not registered in this data store.
      */
     public void removeWarningListener(final WarningListener<? super DataStore> listener)
             throws NoSuchElementException
@@ -141,7 +141,7 @@ public abstract class DataStore implemen
     /**
      * Closes this data store and releases any underlying resources.
      *
-     * @throws DataStoreException If an error occurred while closing this data store.
+     * @throws DataStoreException if an error occurred while closing this data store.
      */
     @Override
     public abstract void close() throws DataStoreException;

Modified: sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/gpx/GPXReader.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/gpx/GPXReader.java?rev=1750175&r1=1750174&r2=1750175&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/gpx/GPXReader.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/gpx/GPXReader.java [UTF-8] Sat Jun 25 00:30:30 2016
@@ -16,7 +16,6 @@
  */
 package org.apache.sis.internal.gpx;
 
-import org.apache.sis.internal.xml.StaxStreamReader;
 import com.esri.core.geometry.Point;
 import java.io.IOException;
 import java.net.URI;
@@ -34,11 +33,18 @@ import java.util.List;
 import javax.xml.stream.XMLStreamException;
 import org.opengis.geometry.Envelope;
 import org.opengis.feature.Feature;
+import org.opengis.metadata.Metadata;
 
-import static javax.xml.stream.XMLStreamReader.*;
+import javax.xml.stream.XMLStreamReader;
 import org.apache.sis.geometry.ImmutableEnvelope;
-import static org.apache.sis.internal.gpx.GPXConstants.*;
 import org.apache.sis.referencing.CommonCRS;
+import org.apache.sis.storage.DataStoreException;
+import org.apache.sis.storage.StorageConnector;
+import org.apache.sis.internal.xml.StaxStreamReader;
+
+import static javax.xml.stream.XMLStreamReader.*;
+import static org.apache.sis.internal.gpx.GPXConstants.*;
+
 
 /**
  * Stax reader class for GPX 1.0 and 1.1 files.
@@ -66,7 +72,7 @@ import org.apache.sis.referencing.Common
  */
 public class GPXReader extends StaxStreamReader {
 
-    private MetaData metadata;
+    MetaData metadata; // TODO
     private Feature current;
     private int wayPointInc = 0;
     private int routeInc = 0;
@@ -81,9 +87,10 @@ public class GPXReader extends StaxStrea
      * @throws IOException if input failed to be opened for any IO reason
      * @throws XMLStreamException if input is not a valid XML stream
      */
-    @Override
-    public void setInput(final Object input) throws IOException, XMLStreamException {
-        super.setInput(input);
+    public GPXReader(final StorageConnector storage) throws DataStoreException, IOException, XMLStreamException {
+        super(storage);
+        final Object input = storage.getStorage();
+        final XMLStreamReader reader = getReader();
 
         //search for the bound tag to generate the envelope
         searchLoop :
@@ -147,16 +154,17 @@ public class GPXReader extends StaxStrea
      *
      * @return Metadata or null if input is not set.
      */
-    public MetaData getMetadata() {
-        return metadata;
+    @Override
+    public Metadata getMetadata() {
+        return null;    // TODO
     }
 
     /**
      * {@inheritDoc }
      */
     @Override
-    public void reset() throws IOException, XMLStreamException {
-        super.reset();
+    public void close() throws DataStoreException {
+        super.close();
         metadata = null;
         current = null;
         wayPointInc = 0;
@@ -171,7 +179,7 @@ public class GPXReader extends StaxStrea
      * @throws javax.xml.stream.XMLStreamException if xml parser encounter an invalid
      *                          element or underlying stream caused an exception
      */
-    public boolean hasNext() throws XMLStreamException {
+    public boolean hasNext() throws DataStoreException, XMLStreamException {
         findNext();
         return current != null;
     }
@@ -183,7 +191,7 @@ public class GPXReader extends StaxStrea
      * @throws javax.xml.stream.XMLStreamException if xml parser encounter an invalid
      *                          element or underlying stream caused an exception
      */
-    public Feature next() throws XMLStreamException {
+    public Feature next() throws DataStoreException, XMLStreamException {
         findNext();
         final Feature ele = current;
         current = null;
@@ -194,7 +202,8 @@ public class GPXReader extends StaxStrea
      * Search for the next feature in the stax stream.
      * This method will set the current local property if there is one.
      */
-    private void findNext() throws XMLStreamException {
+    private void findNext() throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
         if(current != null) return;
 
         boolean first = true;
@@ -230,7 +239,8 @@ public class GPXReader extends StaxStrea
      *
      * @return MetaData
      */
-    private MetaData parseMetaData100() throws XMLStreamException {
+    private MetaData parseMetaData100() throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
 
         final MetaData metadata = new MetaData();
 
@@ -284,8 +294,8 @@ public class GPXReader extends StaxStrea
      *
      * @return MetaData
      */
-    private MetaData parseMetaData110() throws XMLStreamException {
-
+    private MetaData parseMetaData110() throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
         final MetaData metadata = new MetaData();
 
         while (reader.hasNext()) {
@@ -330,8 +340,8 @@ public class GPXReader extends StaxStrea
      *
      * @return CopyRight
      */
-    private CopyRight parseCopyRight() throws XMLStreamException {
-
+    private CopyRight parseCopyRight() throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
         final CopyRight copyright = new CopyRight();
         copyright.setAuthor(reader.getAttributeValue(null, ATT_COPYRIGHT_AUTHOR));
 
@@ -368,8 +378,8 @@ public class GPXReader extends StaxStrea
      *
      * @return URI
      */
-    private URI parseLink() throws XMLStreamException {
-
+    private URI parseLink() throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
         String text = reader.getAttributeValue(null, ATT_LINK_HREF);
         String mime = null;
 
@@ -407,8 +417,8 @@ public class GPXReader extends StaxStrea
      *
      * @return Person
      */
-    private Person parsePerson() throws XMLStreamException {
-
+    private Person parsePerson() throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
         final Person person = new Person();
 
         while (reader.hasNext()) {
@@ -443,7 +453,8 @@ public class GPXReader extends StaxStrea
      *
      * @return Envelope
      */
-    private Envelope parseBound() throws XMLStreamException {
+    private Envelope parseBound() throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
         final String xmin = reader.getAttributeValue(null, ATT_BOUNDS_MINLON);
         final String xmax = reader.getAttributeValue(null, ATT_BOUNDS_MAXLON);
         final String ymin = reader.getAttributeValue(null, ATT_BOUNDS_MINLAT);
@@ -453,7 +464,7 @@ public class GPXReader extends StaxStrea
             throw new XMLStreamException("Error in xml file, metadata bounds not defined correctly");
         }
 
-        toTagEnd(TAG_BOUNDS);
+        skipUntilEnd(TAG_BOUNDS);
 
         return new ImmutableEnvelope(new double[] {Double.parseDouble(xmin), Double.parseDouble(ymin)},
                                      new double[] {Double.parseDouble(xmax), Double.parseDouble(ymax)},
@@ -466,8 +477,8 @@ public class GPXReader extends StaxStrea
      *
      * @return Feature
      */
-    private Feature parseWayPoint(final int index) throws XMLStreamException {
-
+    private Feature parseWayPoint(final int index) throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
         final Feature feature = TYPE_WAYPOINT.newInstance();
         feature.setPropertyValue("index", index);
 
@@ -558,8 +569,8 @@ public class GPXReader extends StaxStrea
      *
      * @return Feature
      */
-    private Feature parseRoute(final int index) throws XMLStreamException {
-
+    private Feature parseRoute(final int index) throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
         final Feature feature = TYPE_ROUTE.newInstance();
         feature.setPropertyValue("index", index);
 
@@ -621,8 +632,8 @@ public class GPXReader extends StaxStrea
      *
      * @return Feature
      */
-    private Feature parseTrackSegment(final int index) throws XMLStreamException {
-
+    private Feature parseTrackSegment(final int index) throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
         final Feature feature = TYPE_TRACK_SEGMENT.newInstance();
         feature.setPropertyValue("index", index);
         int ptInc = 0;
@@ -658,8 +669,8 @@ public class GPXReader extends StaxStrea
      *
      * @return Feature
      */
-    private Feature parseTrack(final int index) throws XMLStreamException {
-
+    private Feature parseTrack(final int index) throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
         final Feature feature = TYPE_TRACK.newInstance();
         feature.setPropertyValue("index", index);
         int segInc = 0;

Modified: sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/StaxStreamReader.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/StaxStreamReader.java?rev=1750175&r1=1750174&r2=1750175&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/StaxStreamReader.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/StaxStreamReader.java [UTF-8] Sat Jun 25 00:30:30 2016
@@ -16,290 +16,216 @@
  */
 package org.apache.sis.internal.xml;
 
-import java.io.*;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.Result;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.dom.DOMSource;
-import org.w3c.dom.Node;
-
-import java.net.URI;
-import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardOpenOption;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLInputFactory;
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.NoSuchElementException;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
-import javax.xml.transform.Source;
-import javax.xml.transform.TransformerException;
-
-import static javax.xml.stream.XMLStreamReader.*;
 import javax.xml.stream.util.StreamReaderDelegate;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerFactoryConfigurationError;
-import javax.xml.transform.stax.StAXSource;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
+import org.apache.sis.storage.DataStore;
+import org.apache.sis.storage.DataStoreException;
+import org.apache.sis.storage.StorageConnector;
+import org.apache.sis.internal.system.XMLInputFactory;
+import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.util.Classes;
+
 
 /**
- * An abstract class for all stax parser.<br>
- * Readers for a given specification should extend this class and
- * provide appropriate read methods.<br>
- * <br>
- * Example : <br>
- * <pre>
- * {@code
- * public class UserReader extends StaxStreamReader{
+ * Base class of Apache SIS readers of XML files using STAX parser.
+ * Readers for a given specification should extend this class and provide appropriate read methods.
  *
- *   public User read() throws XMLStreamException{
- *      //casual stax reading operations
- *      return user;
- *   }
- * }
- * }
- * </pre>
- * And should be used like :<br>
- * <pre>
- * {@code
- * final UserReader instance = new UserReader();
- * try{
- *     instance.setInput(stream);
- *     user = instance.read();
- * }finally{
- *     instance.dispose();
+ * <p>Example:</p>
+ * {@preformat
+ *     public class UserObjectReader extends StaxStreamReader {
+ *         public UserObject read() throws XMLStreamException {
+ *             // Actual STAX reading operations.
+ *             return userObject;
+ *         }
+ *     }
  * }
+ *
+ * And should be used like below:
+ *
+ * {@preformat
+ *     UserObject obj;
+ *     try (UserObjectReader reader = new UserObjectReader(input)) {
+ *         obj = instance.read();
+ *     }
  * }
- * </pre>
  *
- * @author Johann Sorel (Geomatys)
- * @since   0.7
- * @version 0.7
+ * @author  Johann Sorel (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @since   0.8
+ * @version 0.8
  * @module
  */
-public abstract class StaxStreamReader extends AbstractConfigurable implements AutoCloseable {
-
+public abstract class StaxStreamReader extends DataStore {
     /**
-     * Wrapped xml stream reader
+     * The XML stream reader.
      */
-    protected XMLStreamReader reader;
-    
+    private XMLStreamReader reader;
+
     /**
-     * Store the input stream if it was generated by the parser itself.
-     * It will closed on the dispose method or when a new input is set.
+     * The underlying reader or input stream to close when this {@code StaxStreamReader} is closed,
+     * or {@code null} if none.
      */
-    private InputStream sourceStream;
+    private Closeable sourceStream;
 
     /**
-     * close potentiel previous stream and cache if there are some.
-     * This way the reader can be reused for a different input later.
-     * The underlying stax reader will be closed.
-     * 
-     * @throws java.io.IOException if previous source stream caused an exception on close
-     * @throws javax.xml.stream.XMLStreamException if previous stax reader caused an exception on close
+     * Creates a new XML store from the given file, URL, stream or reader object.
+     * This constructor invokes {@link StorageConnector#closeAllExcept(Object)},
+     * keeping open only the needed resource.
+     *
+     * @param  storage information about the storage (URL, stream, <i>etc</i>).
+     * @throws DataStoreException if an error occurred while opening the XML file.
      */
-    public void reset() throws IOException, XMLStreamException {
-        if(sourceStream != null){
-            sourceStream.close();
-            sourceStream = null;
-        }
-        if(reader != null){
-            reader.close();
-            reader = null;
+    protected StaxStreamReader(final StorageConnector storage) throws DataStoreException {
+        ArgumentChecks.ensureNonNull("storage", storage);
+        Object obj = storage.getStorage();
+        try {
+            reader = XMLInputFactory.createFromAny(obj);
+            if (reader != null) {
+                if (obj instanceof Closeable) {
+                    sourceStream = (Closeable) obj;
+                }
+            } else {
+                final InputStream in = storage.getStorageAs(InputStream.class);
+                if (in == null) {
+                    throw new DataStoreException(Errors.format(Errors.Keys.IllegalInputTypeForReader_2, "XML", Classes.getClass(obj)));
+                }
+                reader = XMLInputFactory.createXMLStreamReader(in);
+                sourceStream = in;
+                obj = in;
+            }
+        } catch (XMLStreamException e) {
+            throw new DataStoreException(e);
         }
+        storage.closeAllExcept(obj);
     }
 
     /**
-     * Release potentiel locks or opened stream.
-     * Must be called when the reader is not needed anymore.
-     * It should not be used after this method has been called.
+     * Returns the error resources in the current locale.
      */
-    @Override
-    public void close() throws Exception {
-        reset();
-    }
-    
-    /**
-     * Set the input for this reader.<br>
-     * Handle types are :<br>
-     * - java.io.File<br>
-     * - java.io.Reader<br>
-     * - java.io.InputStream<br>
-     * - java.net.URL<br>
-     * - java.net.URI<br>
-     * - javax.xml.stream.XMLStreamReader<br>
-     * - javax.xml.transform.Source<br>
-     * 
-     * @param input input object
-     * @throws IOException if input failed to be opened for any IO reason
-     * @throws XMLStreamException if input is not a valid XML stream
-     */
-    public void setInput(Object input) throws IOException, XMLStreamException {
-        reset();
-
-        if(input instanceof XMLStreamReader){
-            reader = (XMLStreamReader) input;
-            return;
-        }
-
-        if(input instanceof File){
-            sourceStream = new FileInputStream((File)input);
-            input = sourceStream;
-        }else if(input instanceof Path){
-            sourceStream = Files.newInputStream((Path)input, StandardOpenOption.READ);
-            input = sourceStream;
-        }else if(input instanceof URL){
-            sourceStream = ((URL)input).openStream();
-            input = sourceStream;
-        }else if(input instanceof URI){
-            sourceStream = ((URI)input).toURL().openStream();
-            input = sourceStream;
-        }else if(input instanceof String){
-            input = new StringReader((String) input);
-        }
-
-        reader = toReader(input);
+    private Errors errors() {
+        return Errors.getResources(getLocale());
     }
 
     /**
-     * Iterator on the reader until it reachs the end of the given tag name.
-     * @param tagName tag name to search
-     * @throws XMLStreamException if end tag could not be found
-     *                      or if there is error processing the xml stream
+     * Returns the XML stream reader.
+     *
+     * @return the XML stream reader (never null).
+     * @throws DataStoreException if this XML reader has been closed.
      */
-    protected void toTagEnd(final String tagName) throws XMLStreamException {
-        while (reader.hasNext()) {
-            if(END_ELEMENT == reader.next() &&
-               tagName.equalsIgnoreCase(reader.getLocalName()))
-               return;
+    protected final XMLStreamReader getReader() throws DataStoreException {
+        if (reader != null) {
+            return reader;
         }
-        throw new XMLStreamException("Error in xml file, Could not find end of tag "+tagName+" .");
+        throw new DataStoreException(errors().getString(Errors.Keys.ClosedReader_1, "XML"));
     }
 
     /**
-     * Creates a new XMLStreamReader.
-     * @param input input to convert to stax stream
-     * @return XMLStreamReader
-     * @throws XMLStreamException if the input is not handled
-     */
-    private static final XMLStreamReader toReader(final Object input)
-            throws XMLStreamException {
-        final XMLInputFactory XMLfactory = XMLInputFactory.newInstance();
-        XMLfactory.setProperty("http://java.sun.com/xml/stream/properties/report-cdata-event", Boolean.TRUE);
-        XMLfactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
-
-        if (input instanceof InputStream) {
-            return XMLfactory.createXMLStreamReader((InputStream) input);
-        } else if (input instanceof Source) {
-            return XMLfactory.createXMLStreamReader((Source) input);
-        } else if (input instanceof Node) {
-            
-            /* here we can think that we can use a DOMSource and pass it directly to the
-             * method XMLfactory.createXMLStreamReader(Source) but it lead to a NPE
-             * during the geometry unmarshall.
-             */
-            try {
-                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-                Result outputTarget = new StreamResult(outputStream);
-                Transformer t = TransformerFactory.newInstance().newTransformer();
-                t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-                t.transform(new DOMSource((Node) input), outputTarget);
-                return XMLfactory.createXMLStreamReader(new ByteArrayInputStream(outputStream.toByteArray()));
-            } catch (TransformerException ex) {
-                throw new XMLStreamException(ex);
+     * Returns a XML stream reader over only a portion of the document, from given position inclusive
+     * until the end of the given element exclusive. Nested elements of the same name, if any; will be
+     * ignored.
+     *
+     * @param  tagName name of the tag to close.
+     * @return a reader over a portion of the stream.
+     * @throws DataStoreException if this XML reader has been closed.
+     */
+    protected final XMLStreamReader getSubReader(final String tagName) throws DataStoreException {
+        return new StreamReaderDelegate(getReader()) {
+            /** Increased every time a nested element of the same name is found. */
+            private int nested;
+
+            /** Returns {@code false} if we reached the end of the sub-region. */
+            @Override public boolean hasNext() throws XMLStreamException {
+                return (nested >= 0) && super.hasNext();
             }
-        } else if (input instanceof Reader) {
-            return XMLfactory.createXMLStreamReader((Reader) input);
-        } else {
-            throw new XMLStreamException("Input type is not supported : " + input);
-        }
+
+            /** Reads the next element in the sub-region. */
+            @Override public int next() throws XMLStreamException {
+                if (nested < 0) {
+                    throw new NoSuchElementException();
+                }
+                final int t = super.next();
+                switch (t) {
+                    case START_ELEMENT: if (tagName.equals(getLocalName())) nested++; break;
+                    case END_ELEMENT:   if (tagName.equals(getLocalName())) nested--; break;
+                }
+                return t;
+            }
+        };
     }
 
     /**
-     * <p>XML language provides two notations for boolean type :
-     * "true" can be written "1" and "0" significates "false".
-     * This method considers all this values as CharSequences and return its boolean value.</p>
+     * Skips all remaining elements until we reach the end of the given tag.
+     * Nested tags of the same name, if any, are also skipped.
      *
-     * @param candidate The String to parse
-     * @return true if bool is equal to "true" or "1".
-     */
-    protected static boolean parseBoolean(final String candidate) {
-        if (candidate.length() == 1) {
-            return !candidate.equals("0");
+     * @param  tagName name of the tag to close.
+     * @throws DataStoreException if end tag could not be found.
+     * @throws XMLStreamException if an error occurred while reading the XML stream.
+     */
+    protected final void skipUntilEnd(final String tagName) throws DataStoreException, XMLStreamException {
+        final XMLStreamReader reader = getReader();
+        int nested = 0;
+        while (reader.hasNext()) {
+            switch (reader.next()) {
+                case XMLStreamReader.START_ELEMENT: {
+                    if (tagName.equals(reader.getLocalName())) {
+                        nested++;
+                    }
+                    break;
+                }
+                case XMLStreamReader.END_ELEMENT: {
+                    if (tagName.equals(reader.getLocalName())) {
+                        if (--nested < 0) return;
+                    }
+                    break;
+                }
+            }
         }
-        return Boolean.parseBoolean(candidate);
+        throw new DataStoreException(errors().getString(Errors.Keys.UnexpectedEndOfFile_1, tagName));
     }
 
     /**
-     * <p>This method reads doubles with coma separated.</p>
-     * 
-     * @param candidate Can not be null.
-     * @return parsed double value
+     * Parses the given string as a boolean value. This method performs the same parsing than
+     * {@link Boolean#parseBoolean(String)} with one extension: the "0" value is considered
+     * as {@code false} and the "1" value as {@code true}.
+     *
+     * @param value The string value to parse as a boolean.
+     * @return true if the boolean is equal to "true" or "1".
      */
-    protected static double parseDouble(final String candidate) {
-        return Double.parseDouble(candidate.replace(',', '.'));
+    protected static boolean parseBoolean(final String value) {
+        if (value.length() == 1) {
+            switch (value.charAt(0)) {
+                case '0': return false;
+                case '1': return true;
+            }
+        }
+        return Boolean.parseBoolean(value);
     }
 
     /**
-     * Iterator on the reader until it reach the end of the given tag name.
-     * Return the read elements as dom.
+     * Closes the input stream and releases any resources used by this data store.
+     * This data store can not be used anymore after this method has been invoked.
      *
-     * @param tagName tag
-     * @return Document read elements as a dom document
-     * @throws javax.xml.stream.XMLStreamException if conversion to dom failed
+     * @throws DataStoreException if an error occurred while closing the stream or releasing the resources.
      */
-    protected Document readAsDom(final String tagName) throws XMLStreamException {
-        
-        final XMLStreamReader limitedReader = new StreamReaderDelegate(reader){
-            boolean finished = false;
-
-            @Override
-            public boolean hasNext() throws XMLStreamException {
-                if(finished) return false;
-                return super.hasNext();
+    @Override
+    public synchronized void close() throws DataStoreException {
+        try {
+            if (reader != null) {
+                reader.close();
+                reader = null;
             }
-
-            @Override
-            public int next() throws XMLStreamException {
-                int t = super.next();
-                finished = END_ELEMENT == t && tagName.equalsIgnoreCase(reader.getLocalName());
-                return t;
+            if (sourceStream != null) {
+                sourceStream.close();
+                sourceStream = null;
             }
-
-        };
-
-        final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setNamespaceAware(false);
-
-        final TransformerFactory trsFactory = TransformerFactory.newInstance();
-        try {
-            final DocumentBuilder builder = factory.newDocumentBuilder();
-            final Transformer idTransform = trsFactory.newTransformer();
-            final Source input = new StAXSource(limitedReader);
-            final ByteArrayOutputStream out = new ByteArrayOutputStream();
-            final Result output = new StreamResult(out);
-            idTransform.transform(input, output);
-            final Document doc = builder.parse(new ByteArrayInputStream(out.toByteArray()));
-            return doc;
-        } catch (TransformerConfigurationException e) {
-            throw new XMLStreamException(e.getMessage());
-        } catch (TransformerFactoryConfigurationError e) {
-            throw new XMLStreamException(e.getMessage());
-        } catch (IOException e) {
-            throw new XMLStreamException(e.getMessage());
-        } catch (TransformerException e) {
-            throw new XMLStreamException(e.getMessage());
-        } catch (SAXException e) {
-            throw new XMLStreamException(e.getMessage());
-        } catch (ParserConfigurationException e) {
-            throw new XMLStreamException(e.getMessage());
+        } catch (IOException | XMLStreamException e) {
+            throw new DataStoreException(e);
         }
-
     }
-
 }

Modified: sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/StaxStreamWriter.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/StaxStreamWriter.java?rev=1750175&r1=1750174&r2=1750175&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/StaxStreamWriter.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/StaxStreamWriter.java [UTF-8] Sat Jun 25 00:30:30 2016
@@ -64,12 +64,12 @@ import org.apache.sis.xml.Namespaces;
  * }
  * </pre>
  *
- * @author Johann Sorel (Geomatys)
- * @since   0.7
- * @version 0.7
+ * @author  Johann Sorel (Geomatys)
+ * @since   0.8
+ * @version 0.8
  * @module
  */
-public abstract class StaxStreamWriter extends AbstractConfigurable implements AutoCloseable {
+public abstract class StaxStreamWriter implements AutoCloseable {
 
     /**
      * Underlying stax writer.

Added: sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/XMLStoreProvider.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/XMLStoreProvider.java?rev=1750175&view=auto
==============================================================================
--- sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/XMLStoreProvider.java (added)
+++ sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/XMLStoreProvider.java [UTF-8] Sat Jun 25 00:30:30 2016
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.xml;
+
+import org.apache.sis.storage.DataStoreProvider;
+
+
+/**
+ * The provider of {@link StaxStreamReader} instances.
+ *
+ * @author  Johann Sorel (Geomatys)
+ * @author  Martin Desruisseaux (Geomatys)
+ * @since   0.8
+ * @version 0.8
+ * @module
+ */
+public abstract class XMLStoreProvider extends DataStoreProvider {
+    /**
+     * Creates a new provider.
+     */
+    protected XMLStoreProvider() {
+    }
+}

Propchange: sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/XMLStoreProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/XMLStoreProvider.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Added: sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/package-info.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/package-info.java?rev=1750175&view=auto
==============================================================================
--- sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/package-info.java (added)
+++ sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/package-info.java [UTF-8] Sat Jun 25 00:30:30 2016
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Helper classes for reading and writing XML documents using STAX.
+ *
+ * @author  Johann Sorel (Geomatys)
+ * @since   0.8
+ * @version 0.8
+ * @module
+ */
+package org.apache.sis.internal.xml;

Propchange: sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/package-info.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK8/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/xml/package-info.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Modified: sis/branches/JDK8/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/gpx/GPXReaderTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/gpx/GPXReaderTest.java?rev=1750175&r1=1750174&r2=1750175&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/gpx/GPXReaderTest.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/gpx/GPXReaderTest.java [UTF-8] Sat Jun 25 00:30:30 2016
@@ -20,11 +20,15 @@ import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.io.IOException;
+import javax.xml.stream.XMLStreamException;
 import com.esri.core.geometry.Point;
 import org.opengis.geometry.Envelope;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.geometry.ImmutableEnvelope;
 import org.apache.sis.referencing.CommonCRS;
+import org.apache.sis.storage.StorageConnector;
+import org.apache.sis.storage.DataStoreException;
 import org.junit.Test;
 
 import static org.junit.Assert.*;
@@ -50,6 +54,10 @@ public class GPXReaderTest {
     private static final double DELTA = 0.000001;
 
 
+    private static GPXReader create(final String resource) throws DataStoreException, IOException, XMLStreamException {
+        return new GPXReader(new StorageConnector(GPXReaderTest.class.getResource(resource)));
+    }
+
     /**
      * Tests GPX version 1.0.0 metadata tag parsing.
      *
@@ -57,12 +65,8 @@ public class GPXReaderTest {
      */
     @Test
     public void testMetadataRead100() throws Exception {
-
-        try (final GPXReader reader = new GPXReader()) {
-            reader.setInput(GPXReaderTest.class.getResource(
-                    "/org/apache/sis/gpx/sample_metadata100.xml"));
-
-            final MetaData data = reader.getMetadata();
+        try (final GPXReader reader = create("/org/apache/sis/gpx/sample_metadata100.xml")) {
+            final MetaData data = reader.metadata;
 
             assertEquals("sample", data.getName());
             assertEquals("sample gpx test file", data.getDescription());
@@ -88,12 +92,8 @@ public class GPXReaderTest {
      */
     @Test
     public void testMetadataRead110() throws Exception {
-
-        try (final GPXReader reader = new GPXReader()) {
-            reader.setInput(GPXReaderTest.class.getResource(
-                    "/org/apache/sis/gpx/sample_metadata110.xml"));
-
-            final MetaData data = reader.getMetadata();
+        try (final GPXReader reader = create("/org/apache/sis/gpx/sample_metadata110.xml")) {
+            final MetaData data = reader.metadata;
 
             assertEquals("sample", data.getName());
             assertEquals("sample gpx test file", data.getDescription());
@@ -124,12 +124,8 @@ public class GPXReaderTest {
      */
     @Test
     public void testWayPointRead100() throws Exception {
-
-        try (final GPXReader reader = new GPXReader()) {
-            reader.setInput(GPXReaderTest.class.getResource(
-                    "/org/apache/sis/gpx/sample_waypoint100.xml"));
-
-            final MetaData data = reader.getMetadata();
+        try (final GPXReader reader = create("/org/apache/sis/gpx/sample_waypoint100.xml")) {
+            final MetaData data = reader.metadata;
 
             assertNull(data.getName());
             assertNull(data.getDescription());
@@ -157,12 +153,8 @@ public class GPXReaderTest {
      */
     @Test
     public void testWayPointRead110() throws Exception {
-
-        try (final GPXReader reader = new GPXReader()) {
-            reader.setInput(GPXReaderTest.class.getResource(
-                    "/org/apache/sis/gpx/sample_waypoint110.xml"));
-
-            final MetaData data = reader.getMetadata();
+        try (final GPXReader reader = create("/org/apache/sis/gpx/sample_waypoint110.xml")) {
+            final MetaData data = reader.metadata;
 
             assertNull(data.getName());
             assertNull(data.getDescription());
@@ -191,12 +183,8 @@ public class GPXReaderTest {
      */
     @Test
     public void testRouteRead100() throws Exception {
-
-        try (final GPXReader reader = new GPXReader()) {
-            reader.setInput(GPXReaderTest.class.getResource(
-                    "/org/apache/sis/gpx/sample_route100.xml"));
-
-            final MetaData data = reader.getMetadata();
+        try (final GPXReader reader = create("/org/apache/sis/gpx/sample_route100.xml")) {
+            final MetaData data = reader.metadata;
 
             assertNull(data.getName());
             assertNull(data.getDescription());
@@ -260,12 +248,8 @@ public class GPXReaderTest {
      */
     @Test
     public void testRouteRead110() throws Exception {
-
-        try (final GPXReader reader = new GPXReader()) {
-            reader.setInput(GPXReaderTest.class.getResource(
-                    "/org/apache/sis/gpx/sample_route110.xml"));
-
-            final MetaData data = reader.getMetadata();
+        try (final GPXReader reader = create("/org/apache/sis/gpx/sample_route110.xml")) {
+            final MetaData data = reader.metadata;
 
             assertNull(data.getName());
             assertNull(data.getDescription());
@@ -331,12 +315,8 @@ public class GPXReaderTest {
      */
     @Test
     public void testTrackRead100() throws Exception {
-
-        try (final GPXReader reader = new GPXReader()) {
-            reader.setInput(GPXReaderTest.class.getResource(
-                    "/org/apache/sis/gpx/sample_track100.xml"));
-
-            final MetaData data = reader.getMetadata();
+        try (final GPXReader reader = create("/org/apache/sis/gpx/sample_track100.xml")) {
+            final MetaData data = reader.metadata;
 
             assertNull(data.getName());
             assertNull(data.getDescription());
@@ -405,12 +385,8 @@ public class GPXReaderTest {
      */
     @Test
     public void testTrackRead110() throws Exception {
-
-        try (final GPXReader reader = new GPXReader()) {
-            reader.setInput(GPXReaderTest.class.getResource(
-                    "/org/apache/sis/gpx/sample_track110.xml"));
-
-            final MetaData data = reader.getMetadata();
+        try (final GPXReader reader = create("/org/apache/sis/gpx/sample_track110.xml")) {
+            final MetaData data = reader.metadata;
 
             assertNull(data.getName());
             assertNull(data.getDescription());
@@ -601,6 +577,5 @@ public class GPXReaderTest {
         envelope.setRange(0, d0, d1);
         envelope.setRange(1, d2, d3);
         return new ImmutableEnvelope(envelope);
-
     }
 }

Modified: sis/branches/JDK8/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/gpx/GPXWriterTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/gpx/GPXWriterTest.java?rev=1750175&r1=1750174&r2=1750175&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/gpx/GPXWriterTest.java [UTF-8] (original)
+++ sis/branches/JDK8/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/gpx/GPXWriterTest.java [UTF-8] Sat Jun 25 00:30:30 2016
@@ -29,6 +29,7 @@ import com.esri.core.geometry.Point;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.geometry.ImmutableEnvelope;
 import org.apache.sis.referencing.CommonCRS;
+import org.apache.sis.storage.StorageConnector;
 import org.junit.Test;
 
 import static org.apache.sis.internal.gpx.GPXConstants.*;
@@ -89,9 +90,8 @@ public final strictfp class GPXWriterTes
         writer.writeEndDocument();
         writer.close();
 
-        try (GPXReader reader = new GPXReader()) {
-            reader.setInput(f);
-            assertEquals(metaData, reader.getMetadata());
+        try (GPXReader reader = new GPXReader(new StorageConnector(f))) {
+            assertEquals(metaData, reader.metadata);
         }
 
         if (f.exists()) f.delete();
@@ -250,8 +250,7 @@ public final strictfp class GPXWriterTes
         writer.writeEndDocument();
         writer.close();
 
-        final GPXReader reader = new GPXReader();
-        reader.setInput(f);
+        final GPXReader reader = new GPXReader(new StorageConnector(f));
 
         //testing on toString since JTS geometry always fail on equals method.
         assertEquals(point1.toString(), reader.next().toString());



Mime
View raw message