sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1755633 [1/2] - in /sis/branches/JDK8: core/sis-feature/src/main/java/org/apache/sis/feature/ ide-project/NetBeans/ ide-project/NetBeans/nbproject/ storage/ storage/sis-earth-observation/ storage/sis-earth-observation/src/ storage/sis-eart...
Date Tue, 09 Aug 2016 17:29:35 GMT
Author: desruisseaux
Date: Tue Aug  9 17:29:34 2016
New Revision: 1755633

URL: http://svn.apache.org/viewvc?rev=1755633&view=rev
Log:
Add the sis-earth-observation module. Contains only 2 simples classes for now in order to get feedback from the list before to continue.

Added:
    sis/branches/JDK8/storage/sis-earth-observation/
    sis/branches/JDK8/storage/sis-earth-observation/pom.xml
      - copied, changed from r1755608, sis/branches/JDK8/storage/sis-geotiff/pom.xml
    sis/branches/JDK8/storage/sis-earth-observation/src/
    sis/branches/JDK8/storage/sis-earth-observation/src/main/
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatKeys.java   (with props)
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java   (with props)
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/doc-files/
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/doc-files/LandsatMetadata.html   (with props)
    sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/package-info.java   (with props)
    sis/branches/JDK8/storage/sis-earth-observation/src/test/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/java/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/java/org/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/java/org/apache/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/java/org/apache/sis/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/java/org/apache/sis/storage/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/java/org/apache/sis/storage/earthobservation/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/java/org/apache/sis/storage/earthobservation/LandsatReaderTest.java   (with props)
    sis/branches/JDK8/storage/sis-earth-observation/src/test/java/org/apache/sis/test/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/java/org/apache/sis/test/suite/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/java/org/apache/sis/test/suite/EarthObservationTestSuite.java   (with props)
    sis/branches/JDK8/storage/sis-earth-observation/src/test/resources/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/resources/org/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/resources/org/apache/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/resources/org/apache/sis/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/resources/org/apache/sis/storage/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/resources/org/apache/sis/storage/earthobservation/
    sis/branches/JDK8/storage/sis-earth-observation/src/test/resources/org/apache/sis/storage/earthobservation/LandsatTest.txt   (with props)
Modified:
    sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java
    sis/branches/JDK8/ide-project/NetBeans/build.xml
    sis/branches/JDK8/ide-project/NetBeans/nbproject/build-impl.xml
    sis/branches/JDK8/ide-project/NetBeans/nbproject/genfiles.properties
    sis/branches/JDK8/ide-project/NetBeans/nbproject/project.properties
    sis/branches/JDK8/ide-project/NetBeans/nbproject/project.xml
    sis/branches/JDK8/storage/pom.xml

Modified: sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java?rev=1755633&r1=1755632&r2=1755633&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java [UTF-8] Tue Aug  9 17:29:34 2016
@@ -35,6 +35,7 @@ import org.opengis.feature.Attribute;
 import org.opengis.feature.AttributeType;
 import org.opengis.feature.Feature;
 import org.opengis.feature.FeatureAssociation;
+import org.opengis.feature.FeatureOperationException;
 import org.opengis.feature.IdentifiedType;
 import org.opengis.feature.Operation;
 import org.opengis.feature.Property;
@@ -156,9 +157,10 @@ public abstract class AbstractOperation
      * @param  parameters  the parameters to use for executing the operation.
      *                     Can be {@code null} if the operation does not take any parameters.
      * @return the operation result, or {@code null} if this operation does not produce any result.
+     * @throws FeatureOperationException if the operation execution can not complete.
      */
     @Override
-    public abstract Property apply(Feature feature, ParameterValueGroup parameters);
+    public abstract Property apply(Feature feature, ParameterValueGroup parameters) throws FeatureOperationException;
 
     /**
      * Returns the names of feature properties that this operation needs for performing its task.

Modified: sis/branches/JDK8/ide-project/NetBeans/build.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/ide-project/NetBeans/build.xml?rev=1755633&r1=1755632&r2=1755633&view=diff
==============================================================================
--- sis/branches/JDK8/ide-project/NetBeans/build.xml (original)
+++ sis/branches/JDK8/ide-project/NetBeans/build.xml Tue Aug  9 17:29:34 2016
@@ -190,6 +190,9 @@
         <include name="**/*.gpx"/>
         <include name="**/*.xml"/>
       </fileset>
+      <fileset dir="${project.root}/storage/sis-earth-observation/src/test/resources">
+        <include name="**/*.txt"/>
+      </fileset>
       <fileset dir="${project.root}/storage/sis-shapefile/src/test/resources">
         <include name="**/*.dbf"/>
         <include name="**/*.prj"/>

Modified: sis/branches/JDK8/ide-project/NetBeans/nbproject/build-impl.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/ide-project/NetBeans/nbproject/build-impl.xml?rev=1755633&r1=1755632&r2=1755633&view=diff
==============================================================================
--- sis/branches/JDK8/ide-project/NetBeans/nbproject/build-impl.xml (original)
+++ sis/branches/JDK8/ide-project/NetBeans/nbproject/build-impl.xml Tue Aug  9 17:29:34 2016
@@ -123,6 +123,7 @@ is divided into following sections:
         <condition property="have.tests">
             <or>
                 <available file="${test.console.dir}"/>
+                <available file="${test.earth-obs.dir}"/>
                 <available file="${test.geotiff.dir}"/>
                 <available file="${test.netcdf.dir}"/>
                 <available file="${test.shapefile.dir}"/>
@@ -140,6 +141,7 @@ is divided into following sections:
                 <available file="${src.local-src.dir}"/>
                 <available file="${src.webapp.dir}"/>
                 <available file="${src.console.dir}"/>
+                <available file="${src.earth-obs.dir}"/>
                 <available file="${src.geotiff.dir}"/>
                 <available file="${src.netcdf.dir}"/>
                 <available file="${src.shapefile.dir}"/>
@@ -254,6 +256,7 @@ is divided into following sections:
         <fail unless="src.local-src.dir">Must set src.local-src.dir</fail>
         <fail unless="src.webapp.dir">Must set src.webapp.dir</fail>
         <fail unless="src.console.dir">Must set src.console.dir</fail>
+        <fail unless="src.earth-obs.dir">Must set src.earth-obs.dir</fail>
         <fail unless="src.geotiff.dir">Must set src.geotiff.dir</fail>
         <fail unless="src.netcdf.dir">Must set src.netcdf.dir</fail>
         <fail unless="src.shapefile.dir">Must set src.shapefile.dir</fail>
@@ -265,6 +268,7 @@ is divided into following sections:
         <fail unless="src.utility.dir">Must set src.utility.dir</fail>
         <fail unless="src.fra-profile.dir">Must set src.fra-profile.dir</fail>
         <fail unless="test.console.dir">Must set test.console.dir</fail>
+        <fail unless="test.earth-obs.dir">Must set test.earth-obs.dir</fail>
         <fail unless="test.geotiff.dir">Must set test.geotiff.dir</fail>
         <fail unless="test.netcdf.dir">Must set test.netcdf.dir</fail>
         <fail unless="test.shapefile.dir">Must set test.shapefile.dir</fail>
@@ -295,7 +299,7 @@ is divided into following sections:
     </target>
     <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
         <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" name="srcdir"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <attribute default="${javac.processorpath}" name="processorpath"/>
@@ -336,7 +340,7 @@ is divided into following sections:
     </target>
     <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
         <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" name="srcdir"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <attribute default="${javac.processorpath}" name="processorpath"/>
@@ -369,7 +373,7 @@ is divided into following sections:
     </target>
     <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
         <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" name="srcdir"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <sequential>
@@ -459,6 +463,9 @@ is divided into following sections:
                         <fileset dir="${test.console.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
                         </fileset>
+                        <fileset dir="${test.earth-obs.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
                         <fileset dir="${test.geotiff.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
                         </fileset>
@@ -521,6 +528,9 @@ is divided into following sections:
                     <fileset dir="${test.console.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
                         <filename name="@{testincludes}"/>
                     </fileset>
+                    <fileset dir="${test.earth-obs.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
                     <fileset dir="${test.geotiff.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
                         <filename name="@{testincludes}"/>
                     </fileset>
@@ -663,6 +673,9 @@ is divided into following sections:
                         <fileset dir="${test.console.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
                         </fileset>
+                        <fileset dir="${test.earth-obs.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
                         <fileset dir="${test.geotiff.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
                         </fileset>
@@ -1065,7 +1078,7 @@ is divided into following sections:
                 <include name="*"/>
             </dirset>
         </pathconvert>
-        <j2seproject3:depend srcdir="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${build.generated.subdirs}"/>
+        <j2seproject3:depend srcdir="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}:${build.generated.subdirs}"/>
     </target>
     <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
         <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
@@ -1073,6 +1086,7 @@ is divided into following sections:
             <fileset dir="${src.local-src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.webapp.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.console.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${src.earth-obs.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.geotiff.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.netcdf.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.shapefile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
@@ -1103,7 +1117,7 @@ is divided into following sections:
     <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
         <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
         <j2seproject3:force-recompile/>
-        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}"/>
+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.local-src.dir}:${src.webapp.dir}:${src.console.dir}:${src.earth-obs.dir}:${src.geotiff.dir}:${src.netcdf.dir}:${src.shapefile.dir}:${src.xmlstore.dir}:${src.storage.dir}:${src.feature.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.fra-profile.dir}"/>
     </target>
     <target name="-post-compile-single">
         <!-- Empty placeholder for easier customization. -->
@@ -1378,6 +1392,9 @@ is divided into following sections:
             <fileset dir="${src.console.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
                 <filename name="**/*.java"/>
             </fileset>
+            <fileset dir="${src.earth-obs.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
             <fileset dir="${src.geotiff.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
                 <filename name="**/*.java"/>
             </fileset>
@@ -1424,6 +1441,9 @@ is divided into following sections:
             <fileset dir="${src.console.dir}" excludes="${excludes}" includes="${includes}">
                 <filename name="**/doc-files/**"/>
             </fileset>
+            <fileset dir="${src.earth-obs.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
             <fileset dir="${src.geotiff.dir}" excludes="${excludes}" includes="${includes}">
                 <filename name="**/doc-files/**"/>
             </fileset>
@@ -1476,12 +1496,13 @@ is divided into following sections:
         <!-- You can override this target in the ../build.xml file. -->
     </target>
     <target if="do.depend.true" name="-compile-test-depend">
-        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.console.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}"/>
+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}"/>
     </target>
     <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
-        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.console.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}"/>
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}"/>
         <copy todir="${build.test.classes.dir}">
             <fileset dir="${test.console.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${test.earth-obs.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.geotiff.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.netcdf.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.shapefile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
@@ -1506,9 +1527,10 @@ is divided into following sections:
     <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
         <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
         <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
-        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.console.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}" srcdir="${test.console.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}"/>
+        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}" srcdir="${test.console.dir}:${test.earth-obs.dir}:${test.geotiff.dir}:${test.netcdf.dir}:${test.shapefile.dir}:${test.xmlstore.dir}:${test.storage.dir}:${test.feature.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}:${test.fra-profile.dir}"/>
         <copy todir="${build.test.classes.dir}">
             <fileset dir="${test.console.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${test.earth-obs.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.geotiff.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.netcdf.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.shapefile.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

Modified: sis/branches/JDK8/ide-project/NetBeans/nbproject/genfiles.properties
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/ide-project/NetBeans/nbproject/genfiles.properties?rev=1755633&r1=1755632&r2=1755633&view=diff
==============================================================================
--- sis/branches/JDK8/ide-project/NetBeans/nbproject/genfiles.properties [ISO-8859-1] (original)
+++ sis/branches/JDK8/ide-project/NetBeans/nbproject/genfiles.properties [ISO-8859-1] Tue Aug  9 17:29:34 2016
@@ -3,6 +3,6 @@
 build.xml.data.CRC32=58e6b21c
 build.xml.script.CRC32=462eaba0
 build.xml.stylesheet.CRC32=28e38971@1.53.1.46
-nbproject/build-impl.xml.data.CRC32=b12b6284
-nbproject/build-impl.xml.script.CRC32=43949310
+nbproject/build-impl.xml.data.CRC32=cbc55c0c
+nbproject/build-impl.xml.script.CRC32=0ee238c2
 nbproject/build-impl.xml.stylesheet.CRC32=05530350@1.79.1.48

Modified: sis/branches/JDK8/ide-project/NetBeans/nbproject/project.properties
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/ide-project/NetBeans/nbproject/project.properties?rev=1755633&r1=1755632&r2=1755633&view=diff
==============================================================================
--- sis/branches/JDK8/ide-project/NetBeans/nbproject/project.properties [ISO-8859-1] (original)
+++ sis/branches/JDK8/ide-project/NetBeans/nbproject/project.properties [ISO-8859-1] Tue Aug  9 17:29:34 2016
@@ -48,6 +48,8 @@ src.local-src.dir    = ../local-src
 src.webapp.dir       = ${project.root}/application/sis-webapp/src/main/java
 src.console.dir      = ${project.root}/application/sis-console/src/main/java
 test.console.dir     = ${project.root}/application/sis-console/src/test/java
+src.earth-obs.dir    = ${project.root}/storage/sis-earth-observation/src/main/java
+test.earth-obs.dir   = ${project.root}/storage/sis-earth-observation/src/test/java
 src.geotiff.dir      = ${project.root}/storage/sis-geotiff/src/main/java
 test.geotiff.dir     = ${project.root}/storage/sis-geotiff/src/test/java
 src.netcdf.dir       = ${project.root}/storage/sis-netcdf/src/main/java

Modified: sis/branches/JDK8/ide-project/NetBeans/nbproject/project.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/ide-project/NetBeans/nbproject/project.xml?rev=1755633&r1=1755632&r2=1755633&view=diff
==============================================================================
--- sis/branches/JDK8/ide-project/NetBeans/nbproject/project.xml (original)
+++ sis/branches/JDK8/ide-project/NetBeans/nbproject/project.xml Tue Aug  9 17:29:34 2016
@@ -26,6 +26,7 @@
                 <root id="src.local-src.dir" name="Local sources (unversioned)"/>
                 <root id="src.webapp.dir" name="Web application"/>
                 <root id="src.console.dir" name="Console"/>
+                <root id="src.earth-obs.dir" name="Earth observation"/>
                 <root id="src.geotiff.dir" name="GeoTIFF"/>
                 <root id="src.netcdf.dir" name="NetCDF"/>
                 <root id="src.shapefile.dir" name="Shapefile"/>
@@ -39,6 +40,7 @@
             </source-roots>
             <test-roots>
                 <root id="test.console.dir" name="Test Console"/>
+                <root id="test.earth-obs.dir" name="Test Earth observation"/>
                 <root id="test.geotiff.dir" name="Test GeoTIFF"/>
                 <root id="test.netcdf.dir" name="Test NetCDF"/>
                 <root id="test.shapefile.dir" name="Test Shapefile"/>

Modified: sis/branches/JDK8/storage/pom.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/pom.xml?rev=1755633&r1=1755632&r2=1755633&view=diff
==============================================================================
--- sis/branches/JDK8/storage/pom.xml (original)
+++ sis/branches/JDK8/storage/pom.xml Tue Aug  9 17:29:34 2016
@@ -160,6 +160,7 @@
     <module>sis-netcdf</module>
     <module>sis-geotiff</module>
     <module>sis-xmlstore</module>
+    <module>sis-earth-observation</module>
   </modules>
 
 </project>

Copied: sis/branches/JDK8/storage/sis-earth-observation/pom.xml (from r1755608, sis/branches/JDK8/storage/sis-geotiff/pom.xml)
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-earth-observation/pom.xml?p2=sis/branches/JDK8/storage/sis-earth-observation/pom.xml&p1=sis/branches/JDK8/storage/sis-geotiff/pom.xml&r1=1755608&r2=1755633&rev=1755633&view=diff
==============================================================================
--- sis/branches/JDK8/storage/sis-geotiff/pom.xml (original)
+++ sis/branches/JDK8/storage/sis-earth-observation/pom.xml Tue Aug  9 17:29:34 2016
@@ -36,13 +36,13 @@
            Module Description
        =========================================================== -->
   <groupId>org.apache.sis.storage</groupId>
-  <artifactId>sis-geotiff</artifactId>
+  <artifactId>sis-earth-observation</artifactId>
   <packaging>bundle</packaging>
-  <name>Apache SIS GeoTIFF storage</name>
+  <name>Apache SIS Earth Observation storage</name>
   <description>
   <!-- Left alignment because this description will be copied in META-INF/MANIFEST.MF
        The leading space after the first line is necessary for proper formatting. -->
-Bridge between GeoTIFF convention and ISO 19115 metadata.
+Landsat and MODIS metadata files to ISO 19115 metadata.
   </description>
 
 
@@ -107,7 +107,7 @@ Bridge between GeoTIFF convention and IS
         <artifactId>maven-bundle-plugin</artifactId>
         <configuration>
           <instructions>
-            <Bundle-SymbolicName>org.apache.sis.storage.geotiff</Bundle-SymbolicName>
+            <Bundle-SymbolicName>org.apache.sis.storage.earthobservation</Bundle-SymbolicName>
           </instructions>
         </configuration>
       </plugin>

Added: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatKeys.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatKeys.java?rev=1755633&view=auto
==============================================================================
--- sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatKeys.java (added)
+++ sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatKeys.java [UTF-8] Tue Aug  9 17:29:34 2016
@@ -0,0 +1,179 @@
+/*
+ * 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.storage.earthobservation;
+
+
+/**
+ * Keys of Landsat metadata recognized by {@link LandsatReader}.
+ * This class should not contain the keys of entries ignored by {@code LandsatReader}.
+ *
+ * @author  Remi Marechal (Geomatys)
+ * @author  Thi Phuong Hao Nguyen (VNSC)
+ * @since   0.8
+ * @version 0.8
+ * @module
+ */
+final class LandsatKeys {
+    /**
+     * Do not allow instantiation of this class.
+     */
+    private LandsatKeys() {
+    }
+
+    ////
+    //// GROUP = METADATA_FILE_INFO
+    ////
+
+    /**
+     * Origin of the product.
+     * Value is “Image courtesy of the U.S. Geological Survey”.
+     */
+    static final String ORIGIN = "ORIGIN";
+
+    /**
+     * The unique Landsat scene identifier.
+     * Format is {@code Ls8ppprrrYYYYDDDGGGVV}.
+     */
+    static final String LANDSAT_SCENE_ID = "LANDSAT_SCENE_ID";
+
+    /**
+     * The date when the metadata file for the L1G product set was created.
+     * The date is based on Universal Time Coordinated (UTC).
+     * Date format is {@code YYYY-MM-DDTHH:MM:SSZ}.
+     */
+    static final String FILE_DATE = "FILE_DATE";
+
+
+    ////
+    //// GROUP = PRODUCT_METADATA
+    ////
+
+    /**
+     * The identifier to inform the user of the product type.
+     */
+    static final String DATA_TYPE = "DATA_TYPE";
+
+    /**
+     * The output format of the image.
+     * Example: {@code “GEOTIFF”}.
+     */
+    static final String OUTPUT_FORMAT = "OUTPUT_FORMAT";
+
+    /**
+     * Spacecraft from which the data were captured.
+     * Example: {@code “LANDSAT_8”}.
+     */
+    static final String SPACECRAFT_ID = "SPACECRAFT_ID";
+
+    /**
+     * Sensor(s) used to capture this scene.
+     * Example: {@code “OLI”}, {@code “TIRS”} or {@code “OLI_TIRS”}.
+     */
+    static final String SENSOR_ID = "SENSOR_ID";
+
+    /**
+     * The date the image was acquired.
+     * Date format is {@code YYYY-MM-DD}.
+     */
+    static final String DATE_ACQUIRED = "DATE_ACQUIRED";
+
+    /**
+     * Scene center time of the date the image was acquired.
+     * Time format is {@code HH:MI:SS.SSSSSSSZ}.
+     */
+    static final String SCENE_CENTER_TIME = "SCENE_CENTER_TIME";
+
+    /**
+     * The latitude value for the upper-left corner of the product, measured at the center of the pixel.
+     * Positive value indicates north latitude; negative value indicates south latitude. Units are in degrees.
+     */
+    static final String CORNER_UL_LAT_PRODUCT = "CORNER_UL_LAT_PRODUCT";
+
+    /**
+     * The longitude value for the upper-left corner of the product, measured at the center of the pixel.
+     * Positive value indicates east longitude; negative value indicates west longitude. Units are in degrees.
+     */
+    static final String CORNER_UL_LON_PRODUCT = "CORNER_UL_LON_PRODUCT";
+
+    /**
+     * The latitude value for the upper-right corner of the product. Measured at the center of the pixel.
+     * Units are in degrees.
+     */
+    static final String CORNER_UR_LAT_PRODUCT = "CORNER_UR_LAT_PRODUCT";
+
+    /**
+     * The longitude value for the upper-right corner of the product, measured at the center of the pixel.
+     * Units are in degrees.
+     */
+    static final String CORNER_UR_LON_PRODUCT = "CORNER_UR_LON_PRODUCT";
+
+    /**
+     * The latitude value for the lower-left corner of the product, measured at the center of the pixel.
+     * Units are in degrees.
+     */
+    static final String CORNER_LL_LAT_PRODUCT = "CORNER_LL_LAT_PRODUCT";
+
+    /**
+     * The longitude value for the lower-left corner of the product, measured at the center of the pixel.
+     * Units are in degrees.
+     */
+    static final String CORNER_LL_LON_PRODUCT = "CORNER_LL_LON_PRODUCT";
+
+    /**
+     * The latitude value for the lower-right corner of the product, measured at the center of the pixel.
+     * Units are in degrees.
+     */
+    static final String CORNER_LR_LAT_PRODUCT = "CORNER_LR_LAT_PRODUCT";
+
+    /**
+     * The longitude value for the lower-right corner of the product, measured at the center of the pixel.
+     * Units are in degrees.
+     */
+    static final String CORNER_LR_LON_PRODUCT = "CORNER_LR_LON_PRODUCT";
+
+    /**
+     * The file name for L1 metadata.
+     */
+    static final String METADATA_FILE_NAME = "METADATA_FILE_NAME";
+
+
+    ////
+    //// GROUP = IMAGE_ATTRIBUTES
+    ////
+
+    /**
+     * The overall cloud coverage (percent) of the WRS-2 scene as a value between 0 and 100 inclusive.
+     * -1 indicates that the score was not calculated.
+     */
+    static final String CLOUD_COVER = "CLOUD_COVER";
+
+    /**
+     * The Sun azimuth angle in degrees for the image center location at the image center acquisition time.
+     * Values are from -180 to 180 degrees inclusive.
+     * A positive value indicates angles to the east or clockwise from the north.
+     * A negative value indicates angles to the west or counterclockwise from the north.
+     */
+    static final String SUN_AZIMUTH = "SUN_AZIMUTH";
+
+    /**
+     * The Sun elevation angle in degrees for the image center location at the image center acquisition time.
+     * Values are from -90 to 90 degrees inclusive.
+     * A positive value indicates a daytime scene. A negative value indicates a nighttime scene.
+     * Note: for reflectance calculation, the sun zenith angle is needed, which is 90 - sun elevation angle.
+     */
+    static final String SUN_ELEVATION = "SUN_ELEVATION";
+}

Propchange: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatKeys.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatKeys.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Added: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java?rev=1755633&view=auto
==============================================================================
--- sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java (added)
+++ sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java [UTF-8] Tue Aug  9 17:29:34 2016
@@ -0,0 +1,510 @@
+/*
+ * 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.storage.earthobservation;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import javax.measure.unit.Unit;
+import javax.measure.quantity.Length;
+import javax.measure.unit.SI;
+
+import org.opengis.metadata.Metadata;
+import org.opengis.metadata.acquisition.AcquisitionInformation;
+import org.opengis.metadata.acquisition.OperationType;
+import org.opengis.metadata.citation.DateType;
+import org.opengis.metadata.content.CoverageContentType;
+import org.opengis.metadata.content.ImageDescription;
+import org.opengis.metadata.distribution.Distribution;
+import org.opengis.metadata.extent.Extent;
+import org.opengis.metadata.identification.Identification;
+import org.opengis.metadata.identification.Progress;
+import org.opengis.metadata.maintenance.ScopeCode;
+
+import org.apache.sis.metadata.iso.DefaultIdentifier;
+import org.apache.sis.metadata.iso.DefaultMetadata;
+import org.apache.sis.metadata.iso.acquisition.DefaultAcquisitionInformation;
+import org.apache.sis.metadata.iso.acquisition.DefaultEvent;
+import org.apache.sis.metadata.iso.acquisition.DefaultInstrument;
+import org.apache.sis.metadata.iso.acquisition.DefaultOperation;
+import org.apache.sis.metadata.iso.acquisition.DefaultPlatform;
+import org.apache.sis.metadata.iso.citation.Citations;
+import org.apache.sis.metadata.iso.citation.AbstractParty;
+import org.apache.sis.metadata.iso.citation.DefaultCitation;
+import org.apache.sis.metadata.iso.citation.DefaultCitationDate;
+import org.apache.sis.metadata.iso.citation.DefaultResponsibility;
+import org.apache.sis.metadata.iso.content.DefaultAttributeGroup;
+import org.apache.sis.metadata.iso.content.DefaultBand;
+import org.apache.sis.metadata.iso.content.DefaultImageDescription;
+import org.apache.sis.metadata.iso.distribution.DefaultFormat;
+import org.apache.sis.metadata.iso.distribution.DefaultDistribution;
+import org.apache.sis.metadata.iso.extent.DefaultExtent;
+import org.apache.sis.metadata.iso.extent.DefaultGeographicBoundingBox;
+import org.apache.sis.metadata.iso.extent.DefaultTemporalExtent;
+import org.apache.sis.metadata.iso.identification.DefaultDataIdentification;
+import org.apache.sis.metadata.iso.identification.DefaultAggregateInformation;
+import org.apache.sis.storage.DataStoreException;
+import org.apache.sis.util.iso.DefaultInternationalString;
+import org.apache.sis.util.logging.WarningListeners;
+
+import static java.util.Collections.singleton;
+import static org.apache.sis.storage.earthobservation.LandsatKeys.*;
+
+// Branch-dependent imports
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.format.DateTimeParseException;
+import java.time.temporal.ChronoField;
+import org.opengis.metadata.content.AttributeGroup;
+
+
+/**
+ * Parses Landsat metadata as {@linkplain DefaultMetadata ISO-19115 Metadata} object.
+ *
+ * @author  Thi Phuong Hao Nguyen (VNSC)
+ * @author  Remi Marechal (Geomatys)
+ * @since   0.8
+ * @version 0.8
+ * @module
+ */
+public class LandsatReader {
+    /**
+     * The description of all bands that can be included in a Landsat coverage.
+     * This description is hard-coded and shared by all metadata instances.
+     *
+     * @todo Move those information in a database.
+     */
+    private static final AttributeGroup BANDS;
+    static {
+        final double[] wavelengths = {433, 482, 562, 655, 865, 1610, 2200, 590, 1375, 10800, 12000};
+        final String[] nameband = {
+            "Coastal Aerosol",                      //   433 nm
+            "Blue",                                 //   482 nm
+            "Green",                                //   562 nm
+            "Red",                                  //   655 nm
+            "Near-Infrared",                        //   865 nm
+            "Short Wavelength Infrared (SWIR) 1",   //  1610 nm
+            "Short Wavelength Infrared (SWIR) 2",   //  2200 nm
+            "Panchromatic",                         //   590 nm
+            "Cirrus",                               //  1375 nm
+            "Thermal Infrared Sensor (TIRS) 1",     // 10800 nm
+            "Thermal Infrared Sensor (TIRS) 2"      // 12000 nm
+        };
+        final DefaultBand[] bands = new DefaultBand[wavelengths.length];
+        final Unit<Length> nm = SI.MetricPrefix.NANO(SI.METRE);
+        for (int i = 0; i < bands.length; i++) {
+            final DefaultBand band = new DefaultBand();
+            band.setDescription(new DefaultInternationalString(nameband[i]));
+            band.setPeakResponse(wavelengths[i]);
+            band.setBoundUnits(nm);
+            bands[i] = band;
+        }
+        final DefaultAttributeGroup attributes = new DefaultAttributeGroup(CoverageContentType.PHYSICAL_MEASUREMENT, null);
+        attributes.setAttributes(Arrays.asList(bands));
+        attributes.freeze();
+        BANDS = attributes;
+    }
+
+    /**
+     * All properties found in the Landsat metadata file, except {@code GROUP} and {@code END_GROUP}. Example:
+     *
+     * {@preformat text
+     *   DATE_ACQUIRED         = 2014-03-12
+     *   SCENE_CENTER_TIME     = 03:02:01.5339408Z
+     *   CORNER_UL_LAT_PRODUCT = 12.61111
+     *   CORNER_UL_LON_PRODUCT = 108.33624
+     *   CORNER_UR_LAT_PRODUCT = 12.62381
+     *   CORNER_UR_LON_PRODUCT = 110.44017
+     * }
+     */
+    private final Map<String, String> properties;
+
+    /**
+     * Where to send the warnings.
+     *
+     * @todo Set a reference given by the data store.
+     */
+    private WarningListeners<?> listeners;
+
+    /**
+     * Creates a new metadata parser from the given characters reader.
+     *
+     * @param  reader  a reader opened on the Landsat file.
+     *         It is caller's responsibility to close this reader.
+     * @throws IOException if an I/O error occurred while reading the given stream.
+     * @throws DataStoreException if the content is not a Landsat file.
+     */
+    public LandsatReader(final BufferedReader reader) throws IOException, DataStoreException {
+        properties = new HashMap<>();
+        String line;
+        while ((line = reader.readLine()) != null) {
+            line = line.trim();
+            if (!line.isEmpty() && line.charAt(0) != '#') {
+                /*
+                 * Landsat metadata ends with the END keyword. If we find that keyword, stop reading.
+                 * All remaining lines (if any) will be ignored.
+                 */
+                if (line.equals("END")) {
+                    break;
+                }
+                /*
+                 * Separate the line into its key and value. For example in CORNER_UL_LAT_PRODUCT = 12.61111,
+                 * the key will be CORNER_UL_LAT_PRODUCT and the value will be 12.61111.
+                 */
+                int separator = line.indexOf('=');
+                if (separator < 0) {
+                    throw new DataStoreException("Not a key-value pair.");
+                }
+                String key = line.substring(0, separator).trim().toUpperCase(Locale.US);
+                if (!key.equals("GROUP") && !key.equals("END_GROUP")) {
+                    String value = line.substring(separator + 1).trim();
+                    if (key.isEmpty()) {
+                        throw new DataStoreException("Key shall not be empty.");
+                    }
+                    /*
+                     * In a Landsat file, String values are between quotes. Example: STATION_ID = "LGN".
+                     * If such quotes are found, remove them.
+                     */
+                    int length = value.length();
+                    if (length >= 2 && value.charAt(0) == '"' && value.charAt(length - 1) == '"') {
+                        value = value.substring(1, length - 1).trim();
+                        length = value.length();
+                    }
+                    /*
+                     * Store only non-empty values. If a different value was already specified for the same key,
+                     * this is considered as an error.
+                     */
+                    if (length != 0) {
+                        String previous = properties.put(key, value);
+                        if (previous != null && !value.equals(previous)) {
+                            throw new DataStoreException("Duplicated values for \"" + key + "\".");
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns the property value associated to the given key, or {@code null} if none.
+     *
+     * @param  key  the key for which to get the property value.
+     * @return the property value associated to the given key, {@code null} if none.
+     */
+    private String getValue(String key) {
+        return properties.get(key);
+    }
+
+    /**
+     * Returns the floating-point value associated to the given key, or {@code NaN} if none.
+     *
+     * @param  key the key for which to get the floating-point value.
+     * @return the floating-point value associated to the given key, or {@link Double#NaN} if none.
+     * @throws NumberFormatException if the property associated to the given key can not be parsed
+     *         as a floating-point number.
+     */
+    private double getNumericValue(String key) throws NumberFormatException {
+        String value = getValue(key);
+        return (value != null) ? Double.parseDouble(value) : Double.NaN;
+    }
+
+    /**
+     * Returns the minimal or maximal value associated to the given two keys, or {@code NaN} if none.
+     *
+     * @param  key1  the key for which to get the first floating-point value.
+     * @param  key2  the key for which to get the second floating-point value.
+     * @param  max   {@code true} for the maximal value, or {@code false} for the minimal value.
+     * @return the minimal (if {@code max} is false) or maximal (if {@code max} is true) floating-point value
+     *         associated to the given keys, or {@link Double#NaN} if none.
+     * @throws NumberFormatException if the properties associated to the given keys can not be parsed
+     *         as floating-point numbers.
+     */
+    private double getExtremumValue(String key1, String key2, boolean max) throws NumberFormatException {
+        double value1 = getNumericValue(key1);
+        double value2 = getNumericValue(key2);
+        if (max ? (value2 > value1) : (value2 < value1)) {
+            return value2;
+        } else {
+            return value1;
+        }
+    }
+
+    /**
+     * Returns the date associated to the given key, or {@code null} if none.
+     * The date is expected to be formatted in ISO 8601 format.
+     *
+     * @param  key the key for which to get the date value.
+     * @return the date associated to the given key, or {@code null} if none.
+     * @throws DateTimeParseException if the date can not be parsed.
+     */
+    private Date getDate(final String key) throws DateTimeParseException {
+        final String value = getValue(key);
+        if (value == null) {
+            return null;
+        }
+        final OffsetDateTime time = OffsetDateTime.parse(value);
+        return new Date(time.toEpochSecond() * 1000 + time.getNano() / 1000000);
+    }
+
+    /**
+     * Returns the date and time associated to the given key, or {@code null} if none.
+     * The date and time are expected to be in two separated fields, with each field
+     * formatted in ISO 8601 format.
+     *
+     * @param  dateKey  the key for which to get the date value.
+     * @param  timeKey  the key for which to get the time value.
+     * @return the date and time associated to the given keys, or {@code null} if none.
+     * @throws DateTimeParseException if the date can not be parsed.
+     */
+    private Date getDate(final String dateKey, final String timeKey) throws DateTimeParseException {
+        String value = getValue(dateKey);
+        if (value == null) {
+            return null;
+        }
+        final LocalDate date = LocalDate.parse(value);
+        value = getValue(timeKey);
+        final long millis;
+        if (value == null) {
+            millis = date.getLong(ChronoField.INSTANT_SECONDS) * 1000;
+        } else {
+            final OffsetDateTime time = date.atTime(OffsetTime.parse(value));
+            millis = time.toEpochSecond() * 1000 + time.getNano() / 1000000;
+        }
+        return new Date(millis);
+    }
+
+    /**
+     * Gets information about an image's suitability for use.
+     *
+     * @throws DataStoreException if a property value can not be parsed as a number or a date.
+     */
+    private ImageDescription createImageDescription() throws DataStoreException {
+        final DefaultImageDescription content = new DefaultImageDescription();
+        try {
+            double value;
+            if (0 <= (value = getNumericValue(CLOUD_COVER))) {
+                content.setCloudCoverPercentage(value);
+            }
+            if (!Double.isNaN(value = getNumericValue(SUN_AZIMUTH))) {
+                content.setIlluminationAzimuthAngle(value);
+            }
+            if (!Double.isNaN(value = getNumericValue(SUN_ELEVATION))) {
+                content.setIlluminationElevationAngle(value);
+            }
+        } catch (NumberFormatException e) {
+            throw new DataStoreException("Can not read content information.", e);
+        }
+        content.setAttributeGroups(singleton(BANDS));
+        return content;
+    }
+
+    /**
+     * Gets the geographic and temporal extent for identification info, or {@code null} if none.
+     * This method expects the data acquisition time in argument in order to avoid to compute it twice.
+     *
+     * @param  sceneTime the data acquisition time, or {@code null} if none.
+     * @return the data extent in Identification info, or {@code null} if none.
+     * @throws DataStoreException if a property value can not be parsed as a number or a date.
+     */
+    private Extent createExtent(final Date sceneTime) throws DataStoreException {
+        final DefaultGeographicBoundingBox box;
+        try {
+            box = new DefaultGeographicBoundingBox(
+                    getExtremumValue(CORNER_UL_LON_PRODUCT, CORNER_LL_LON_PRODUCT, false),      // westBoundLongitude
+                    getExtremumValue(CORNER_UR_LON_PRODUCT, CORNER_LR_LON_PRODUCT, true),       // eastBoundLongitude
+                    getExtremumValue(CORNER_LL_LAT_PRODUCT, CORNER_LR_LAT_PRODUCT, false),      // southBoundLatitude
+                    getExtremumValue(CORNER_UL_LAT_PRODUCT, CORNER_UR_LAT_PRODUCT, true));      // northBoundLatitude
+        } catch (NumberFormatException e) {
+            throw new DataStoreException("Can not read the geographic bounding box.", e);
+        }
+        final DefaultExtent extent = new DefaultExtent();
+        final boolean isEmpty = box.isEmpty();
+        if (!isEmpty) {
+            extent.setGeographicElements(singleton(box));
+        }
+        if (sceneTime != null) {
+            try {
+                final DefaultTemporalExtent t = new DefaultTemporalExtent();
+                t.setBounds(sceneTime, sceneTime);
+                extent.setTemporalElements(singleton(t));
+            } catch (UnsupportedOperationException e) {
+                // May happen if the temporal module (which is optional) is not on the classpath.
+                warning(e);
+                if (isEmpty) {
+                    return null;
+                }
+            }
+        }
+        return extent;
+    }
+
+    /**
+     * Gets the acquisition information, or {@code null} if none. This method expects
+     * the data acquisition time in argument in order to avoid to compute it twice.
+     *
+     * @param  sceneTime  the data acquisition time, or {@code null} if none.
+     * @return the data for the Acquisition Information, or {@code null} if none.
+     */
+    private AcquisitionInformation createAcquisitionInformation(final Date sceneTime) {
+        final DefaultAcquisitionInformation acquisition = new DefaultAcquisitionInformation();
+        final DefaultPlatform platform = new DefaultPlatform();
+        String value = getValue(SPACECRAFT_ID);
+        boolean isEmpty = true;
+        if (value != null) {
+            platform.setIdentifier(new DefaultIdentifier(value));
+            isEmpty = false;
+        }
+        value = getValue(SENSOR_ID);
+        if (value != null) {
+            final DefaultInstrument instrument = new DefaultInstrument();
+            instrument.setIdentifier(new DefaultIdentifier(value));
+            platform.setInstruments(singleton(instrument));
+            isEmpty = false;
+        }
+        if (!isEmpty) {
+            acquisition.setPlatforms(singleton(platform));
+        }
+        if (sceneTime != null) {
+            final DefaultEvent event = new DefaultEvent();
+            event.setTime(sceneTime);
+            final DefaultOperation op = new DefaultOperation();
+            op.setSignificantEvents(singleton(event));
+            op.setType(OperationType.REAL);
+            op.setStatus(Progress.COMPLETED);
+            acquisition.setOperations(singleton(op));
+            isEmpty = false;
+        }
+        return isEmpty ? null : acquisition;
+    }
+
+    /**
+     * Get basic Information about the distributor of and options for obtaining the resource.
+     *
+     * @return the data distributor information, or {@code null} if none.
+     */
+    private Distribution createDistribution() {
+        DefaultDistribution distribution = new DefaultDistribution();
+        DefaultFormat format = new DefaultFormat();
+        String value = getValue(OUTPUT_FORMAT);
+        format.setName(new DefaultInternationalString(value));
+        distribution.setDistributionFormats(singleton(format));
+        return distribution;
+    }
+
+    /**
+     * Gets basic information required to uniquely identify the data, or {@code null} if none.
+     * This method expects the metadata and data acquisition time in argument in order to avoid
+     * to compute them twice.
+     *
+     * @param  metadataTime  the metadata file creation time, or {@code null} if none.
+     * @param  sceneTime     the data acquisition time, or {@code null} if none.
+     * @return the data identification information, or {@code null} if none.
+     * @throws DataStoreException if a property value can not be parsed as a number or a date.
+     */
+    private Identification createIdentification(final Date metadataTime, final Date sceneTime) throws DataStoreException {
+        final DefaultDataIdentification identification = new DefaultDataIdentification();
+        final DefaultCitation citation = new DefaultCitation();
+        boolean isEmpty = true;
+        if (metadataTime != null) {
+            citation.setDates(singleton(new DefaultCitationDate(metadataTime, DateType.PUBLICATION)));
+            isEmpty = false;
+        }
+        String value = getValue(LANDSAT_SCENE_ID);
+        if (value != null) {
+            citation.setTitle(new DefaultInternationalString(value + ".tar.gz"));
+            isEmpty = false;
+        }
+        if (!isEmpty) {
+            identification.setCitation(citation);
+        }
+        final Extent extent = createExtent(sceneTime);
+        if (extent != null) {
+            identification.setExtents(singleton(extent));
+            isEmpty = false;
+        }
+        value = getValue(ORIGIN);
+        if (value != null) {
+            DefaultResponsibility responsibility = new DefaultResponsibility();
+            AbstractParty party = new AbstractParty();
+            party.setName(new DefaultInternationalString(value));
+            responsibility.getParties().add(party);
+            citation.getCitedResponsibleParties().add(responsibility);
+            isEmpty = false;
+        }
+        value = getValue(ORIGIN);
+        if (value != null) {
+            DefaultCitation citation1 = new DefaultCitation();
+            DefaultAggregateInformation aggregateInformation = new DefaultAggregateInformation();
+            citation1.setTitle(new DefaultInternationalString(value));
+            aggregateInformation.setAggregateDataSetName(citation1);
+            identification.setAggregationInfo(singleton(aggregateInformation));
+            isEmpty = false;
+        }
+        return isEmpty ? null : identification;
+    }
+
+    /**
+     * Returns the metadata about the resources described in the Landsat file.
+     *
+     * @return the metadata about Landsat resources.
+     * @throws DataStoreException if a property value can not be parsed as a number or a date.
+     */
+    public Metadata read() throws DataStoreException {
+        final DefaultMetadata metadata = new DefaultMetadata();
+        metadata.setMetadataStandards(Citations.ISO_19115);
+        final Date metadataTime = getDate(FILE_DATE);
+        if (metadataTime != null) {
+            metadata.setDateInfo(singleton(new DefaultCitationDate(metadataTime, DateType.CREATION)));
+        }
+        metadata.setLanguage(Locale.ENGLISH);
+        metadata.setFileIdentifier(getValue(LANDSAT_SCENE_ID));
+        final Distribution metadataDistribution = createDistribution();
+        metadata.setDistributionInfo(singleton(metadataDistribution));
+        final Date sceneTime = getDate(DATE_ACQUIRED, SCENE_CENTER_TIME);
+        final Identification identification = createIdentification(metadataTime, sceneTime);
+        if (identification != null) {
+            metadata.setIdentificationInfo(singleton(identification));
+        }
+        final ImageDescription content = createImageDescription();
+        if (content != null) {
+            metadata.setContentInfo(singleton(content));
+        }
+        final AcquisitionInformation acquisition = createAcquisitionInformation(sceneTime);
+        if (acquisition != null) {
+            metadata.setAcquisitionInformation(singleton(acquisition));
+        }
+        if (getValue(DATA_TYPE) != null) {
+            metadata.setHierarchyLevels(singleton(ScopeCode.METADATA));
+        }
+        return metadata;
+    }
+
+    /**
+     * Invoked when a non-fatal exception occurred while reading metadata. This method
+     * sends a record to the registered listeners if any, or logs the record otherwise.
+     */
+    private void warning(final Exception e) {
+        if (listeners != null) {
+            listeners.warning(null, e);
+        }
+    }
+}

Propchange: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatReader.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Added: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/doc-files/LandsatMetadata.html
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/doc-files/LandsatMetadata.html?rev=1755633&view=auto
==============================================================================
--- sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/doc-files/LandsatMetadata.html (added)
+++ sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/doc-files/LandsatMetadata.html Tue Aug  9 17:29:34 2016
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!--
+  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.
+-->
+
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <title>Landsat to ISO 19115 metadata</title>
+    <style>
+      table {
+        width:          auto;
+        background:     #F8F8F8;
+        margin:         6px 0px;
+        border-style:   solid;
+        border-width:   2px;
+        border-color:   lightgray;
+        border-spacing: 0;
+        padding:        9px;
+        line-height:    1em;
+        text-align:     left;
+        font-size:      small;
+        font-family:    Helvetica, Arial, sans-serif;
+      }
+      table caption {
+        text-align:     left;
+        font-weight:    bold;
+        padding-top:    18px;
+        padding-bottom: 12px;
+        font-size:      large;
+      }
+      table tr th {
+        padding-left:        9px;
+        padding-bottom:      9px;
+        margin-bottom:       9px;
+        border-bottom-width: 1px;
+        border-bottom-style: solid;
+        border-bottom-color: lightgray;
+      }
+      table tr td {
+        padding:        0 9px;
+        vertical-align: text-top;
+      }
+      table tr td code {
+        font-family: Andale Mono, Courier New, monospace;
+      }
+      code.rf, span.rf {
+        color: green
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Landsat to ISO 19115 metadata</h1>
+    <p>
+      Landset metadata are provided as <var>key</var>-<var>value</var> pairs in text files (ASCII).
+      While Landsat files are divided in groups (<code>METADATA_FILE_INFO</code>, <code>PRODUCT_METADATA</code>,
+      <code>IMAGE_ATTRIBUTES</code>, <code>MIN_MAX_RADIANCE</code>, <code>MIN_MAX_REFLECTANCE</code>,
+      <code>MIN_MAX_PIXEL_VALUE</code>, <code>RADIOMETRIC_RESCALING</code>, <code>TIRS_THERMAL_CONSTANTS</code>,
+      <code>PROJECTION_PARAMETERS</code>), they can nevertheless be though as flat structures since there is no
+      duplicated key names. Consequently the Landsat group are omitted in the following discussion.
+      But ISO 19115 metadata on the other hand are structured as trees, and this tree structure can not be ignored.
+    </p>
+    <p>
+      Landsat values are mapped to ISO 19115 metadata when an ISO property can be found for a Landsat key.
+      The Landsat to ISO mapping is not always a one-to-one relationship.
+      In some cases the ISO value need to be computed from two or more Landsat values.
+      In other cases the ISO value does not appear in the Landsat file at all,
+      so the value is hard-coded in the <code>LandsatReader</code> class.
+    </p>
+    <p>
+      In the following table, black values in the Landsat column are hard-coded values inferred from table 2-1:
+      <cite>Band Reference Table</cite> in the Landsat Data Format Control Book (DFCB).
+      Green values are values to be read and interpreted as described in table 3-4: <cite>L1Gt / L1T Metadata File</cite>.
+      Values in the ISO 19115 column shown the paths to an ISO property relative to the <code>Metadata</code> root.
+      When an ISO property can accept various subtypes, the type used are those listed below:
+    </p>
+    <ul>
+      <li><code>identificationInfo</code> is of type <code>DataIdentification</code> (a <code>Identification</code> subtype)</li>
+      <li><code>contentInfo</code> is of type <code>ImageDescription</code> (a <code>ContentInformation</code> subtype)</li>
+      <li><code>attribute</code> is of type <code>Band</code> (a <code>RangeDimension</code> subtype)</li>
+    </ul>
+    <p><b>Sources:</b></p>
+    <ul>
+      <li><a href="http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=53798">ISO 19115-1:2014
+          - Geographic information - Metadata - Part 1: Fundamentals</a></li>
+      <li><a href="https://landsat.usgs.gov/documents/LSDS-809.pdf">LANDSAT 8 (L8) level 1 (L1) Data Format Control Book (DFCB)</a></li>
+    </ul>
+    <table class="compact" style="white-space: nowrap">
+      <caption>Metadata mapping</caption>
+      <tr>
+        <th>ISO 19115 property</th>
+        <th>Landsat property</th>
+        <th>Description</th>
+      </tr>
+      <tr><td colspan="3" style="padding-top: 9px">Metadata</td></tr>
+      <tr><td><code>  ├─</code>Identification info</td>                   <td></td>                                             <td></td></tr>
+      <tr><td><code>  │   ├─</code>Citation</td>                          <td></td>                                             <td></td></tr>
+      <tr><td><code>  │   │   ├─</code>Date:</td>                         <td><code class="rf">FILE_DATE</code></td>            <td>The date when metadata file product set was created.</td></tr>
+      <tr><td><code>  │   │   │   └─</code>Date type:</td>                <td>Publication</td>                                  <td></td></tr>
+      <tr><td><code>  │   │   └─</code>Identifier:</td>                   <td><code class="rf">LANDSAT_SCENE_ID</code></td>     <td>The unique Landsat scene identifier.</td></tr>
+      <tr><td><code>  │   ├─</code>Credit:</td>                           <td><code class="rf">ORIGIN</code></td>               <td>Recognition of those who contributed to the resources.</td></tr>
+      <tr><td><code>  │   ├─</code>Resource format</td>                   <td></td>                                             <td></td></tr>
+      <tr><td><code>  │   │   └─</code>Format specification citation</td> <td></td>                                             <td></td></tr>
+      <tr><td><code>  │   │       └─</code>Title:</td>                    <td><code class="rf">OUTPUT_FORMAT</code></td>        <td>The name of the data transfer format.</td></tr>
+      <tr><td><code>  │   └─</code>Extent</td>                            <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       ├─</code>Geographic element</td>            <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>West bound longitude:</td>     <td><code>min(<span class="rf">CORNER_UL_LON_PRODUCT</span>, <span class="rf">CORNER_LL_LON_PRODUCT</span>)</code></td> <td>The western-most longitude value in degrees.</td></tr>
+      <tr><td><code>  │       │   ├─</code>East bound longitude:</td>     <td><code>max(<span class="rf">CORNER_UR_LON_PRODUCT</span>, <span class="rf">CORNER_LR_LON_PRODUCT</span>)</code></td> <td>The eastern-most longitude value in degrees.</td></tr>
+      <tr><td><code>  │       │   ├─</code>South bound latitude:</td>     <td><code>min(<span class="rf">CORNER_LL_LAT_PRODUCT</span>, <span class="rf">CORNER_LR_LAT_PRODUCT</span>)</code></td> <td>The southern-most longitude value in degrees.</td></tr>
+      <tr><td><code>  │       │   ├─</code>North bound latitude:</td>     <td><code>max(<span class="rf">CORNER_UL_LAT_PRODUCT</span>, <span class="rf">CORNER_UR_LAT_PRODUCT</span>)</code></td> <td>The northern-most longitude value in degrees.</td></tr>
+      <tr><td><code>  │       │   └─</code>Extent type code:</td>         <td>true</td>                                         <td></td></tr>
+      <tr><td><code>  │       └─</code>Temporal element</td>              <td></td>                                             <td></td></tr>
+      <tr><td><code>  │           └─</code>Start time:</td>               <td><code><span class="rf">DATE_ACQUIRED</span> + <span class="rf">SCENE_CENTER_TIME</span></code></td> <td>The date and center time the image was acquired.</td></tr>
+      <tr><td><code>  ├─</code>Content info</td>                          <td></td>                                             <td></td></tr>
+      <tr><td><code>  │   ├─</code>Illumination elevation angle:</td>     <td><code class="rf">SUN_ELEVATION</code></td>        <td>The Sun elevation angle in degrees for the image center location at the image center acquisition time.</td></tr>
+      <tr><td><code>  │   ├─</code>Illumination azimuth angle:</td>       <td><code class="rf">SUN_AZIMUTH</code></td>          <td>The Sun azimuth angle in degrees for the image center location at the image center acquisition time.</td></tr>
+      <tr><td><code>  │   ├─</code>Cloud cover percentage:</td>           <td><code class="rf">CLOUD_COVER</code></td>          <td>The overall cloud coverage (percent) of the WRS-2 scene.</td></tr>
+      <tr><td><code>  │   └─</code>Attribute group</td>                   <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       ├─</code>Content type:</td>                 <td>Physical measurement</td>                         <td>The types of information represented by the values.</td></tr>
+      <tr><td><code>  │       ├─</code>Attribute (1 of 11)</td>           <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Bound units:</td>              <td>nm</td>                                           <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Peak response:</td>            <td>433</td>                                          <td></td></tr>
+      <tr><td><code>  │       │   └─</code>Description:</td>              <td>Coastal Aerosol (Operational Land Imager)</td>    <td></td></tr>
+      <tr><td><code>  │       ├─</code>Attribute (2 of 11)</td>           <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Bound units:</td>              <td>nm</td>                                           <td>Units in which sensor wavelengths are expressed.</td></tr>
+      <tr><td><code>  │       │   ├─</code>Peak response:</td>            <td>482</td>                                          <td></td></tr>
+      <tr><td><code>  │       │   └─</code>Description:</td>              <td>Blue (OLI)</td>                                   <td></td></tr>
+      <tr><td><code>  │       ├─</code>Attribute (3 of 11)</td>           <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Bound units:</td>              <td>nm</td>                                           <td>Units in which sensor wavelengths are expressed.</td></tr>
+      <tr><td><code>  │       │   ├─</code>Peak response:</td>            <td>562</td>                                          <td></td></tr>
+      <tr><td><code>  │       │   └─</code>Description:</td>              <td>Green (OLI)</td>                                  <td></td></tr>
+      <tr><td><code>  │       ├─</code>Attribute (4 of 11)</td>           <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Bound units:</td>              <td>nm</td>                                           <td>Units in which sensor wavelengths are expressed.</td></tr>
+      <tr><td><code>  │       │   ├─</code>Peak response:</td>            <td>655</td>                                          <td></td></tr>
+      <tr><td><code>  │       │   └─</code>Description:</td>              <td>Red (OLI)</td>                                    <td></td></tr>
+      <tr><td><code>  │       ├─</code>Attribute (5 of 11)</td>           <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Bound units:</td>              <td>nm</td>                                           <td>Units in which sensor wavelengths are expressed.</td></tr>
+      <tr><td><code>  │       │   ├─</code>Peak response:</td>            <td>865</td>                                          <td></td></tr>
+      <tr><td><code>  │       │   └─</code>Description:</td>              <td>Near-Infrared (NIR) (OLI)</td>                    <td></td></tr>
+      <tr><td><code>  │       ├─</code>Attribute (6 of 11)</td>           <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Bound units:</td>              <td>nm</td>                                           <td>Units in which sensor wavelengths are expressed.</td></tr>
+      <tr><td><code>  │       │   ├─</code>Peak response:</td>            <td>1610</td>                                         <td></td></tr>
+      <tr><td><code>  │       │   └─</code>Description:</td>              <td>Short Wavelength Infrared (SWIR) 1 (OLI)</td>     <td></td></tr>
+      <tr><td><code>  │       ├─</code>Attribute (7 of 11)</td>           <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Bound units:</td>              <td>nm</td>                                           <td>Units in which sensor wavelengths are expressed.</td></tr>
+      <tr><td><code>  │       │   ├─</code>Peak response:</td>            <td>2200</td>                                         <td></td></tr>
+      <tr><td><code>  │       │   └─</code>Description:</td>              <td>SWIR 2 (OLI)</td>                                 <td></td></tr>
+      <tr><td><code>  │       ├─</code>Attribute (8 of 11)</td>           <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Bound units:</td>              <td>nm</td>                                           <td>Units in which sensor wavelengths are expressed.</td></tr>
+      <tr><td><code>  │       │   ├─</code>Peak response:</td>            <td>590</td>                                          <td></td></tr>
+      <tr><td><code>  │       │   └─</code>Description:</td>              <td>Panchromatic (OLI)</td>                           <td></td></tr>
+      <tr><td><code>  │       ├─</code>Attribute (9 of 11)</td>           <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Bound units:</td>              <td>nm</td>                                           <td>Units in which sensor wavelengths are expressed.</td></tr>
+      <tr><td><code>  │       │   ├─</code>Peak response:</td>            <td>1375</td>                                         <td></td></tr>
+      <tr><td><code>  │       │   └─</code>Description:</td>              <td>Cirrus (OLI)</td>                                 <td></td></tr>
+      <tr><td><code>  │       ├─</code>Attribute (10 of 11)</td>          <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       │   ├─</code>Bound units:</td>              <td>nm</td>                                           <td>Units in which sensor wavelengths are expressed.</td></tr>
+      <tr><td><code>  │       │   ├─</code>Peak response:</td>            <td>10800</td>                                        <td></td></tr>
+      <tr><td><code>  │       │   └─</code>Description:</td>              <td>Thermal Infrared Sensor (TIRS) 1</td>             <td></td></tr>
+      <tr><td><code>  │       └─</code>Attribute (11 of 11)</td>          <td></td>                                             <td></td></tr>
+      <tr><td><code>  │           ├─</code>Bound units:</td>              <td>nm</td>                                           <td>Units in which sensor wavelengths are expressed.</td></tr>
+      <tr><td><code>  │           ├─</code>Peak response:</td>            <td>12000</td>                                        <td></td></tr>
+      <tr><td><code>  │           └─</code>Description:</td>              <td>TIRS 2</td>                                       <td></td></tr>
+      <tr><td><code>  ├─</code>Acquisition information</td>               <td></td>                                             <td></td></tr>
+      <tr><td><code>  │   ├─</code>Operation</td>                         <td></td>                                             <td></td></tr>
+      <tr><td><code>  │   │   ├─</code>Progress:</td>                     <td>Completed</td>                                    <td>Status of the data acquisition.</td></tr>
+      <tr><td><code>  │   │   ├─</code>Type:</td>                         <td>Real</td>                                         <td>Collection technique for the operation.</td></tr>
+      <tr><td><code>  │   │   └─</code>Significant event</td>             <td></td>                                             <td></td></tr>
+      <tr><td><code>  │   │       ├─</code>Context:</td>                  <td>Acquisition</td>                                  <td>Meaning of the event.</td></tr>
+      <tr><td><code>  │   │       └─</code>Time:</td>                     <td><code><span class="rf">DATE_ACQUIRED</span> + <span class="rf">SCENE_CENTER_TIME</span></code></td> <td style="color: red">Duplication of above "Start time" metadata.</td></tr>
+      <tr><td><code>  │   └─</code>Platform</td>                          <td></td>                                             <td></td></tr>
+      <tr><td><code>  │       ├─</code>Identifier:</td>                   <td><code class="rf">SPACECRAFT_ID</code></td>        <td>Spacecraft from which the data were captured.</td></tr>
+      <tr><td><code>  │       └─</code>Instrument</td>                    <td></td>                                             <td></td></tr>
+      <tr><td><code>  │           └─</code>Identifier:</td>               <td><code class="rf">SENSOR_ID</code></td>            <td>Sensor used to capture this scene.</td></tr>
+      <tr><td><code>  └─</code>Date info:</td>                            <td><code class="rf">FILE_DATE</code></td>            <td style="color: red">Duplication of above "Citation date" metadata.</td></tr>
+      <tr><td><code>      └─</code>Date type:</td>                        <td>Creation</td>                                     <td>Hard-coded ISO 19115 value to be set only if <code>dateInfo/date</code> exists.</td></tr>
+    </table>
+  </body>
+</html>

Propchange: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/doc-files/LandsatMetadata.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/doc-files/LandsatMetadata.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/package-info.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/package-info.java?rev=1755633&view=auto
==============================================================================
--- sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/package-info.java (added)
+++ sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/package-info.java [UTF-8] Tue Aug  9 17:29:34 2016
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+/**
+ * Metadata readers for some format used in Earth observation (Landsat, MODIS).
+ * This package includes mapping from the following formats to ISO 19115 metadata:
+ *
+ * <table class="sis">
+ *   <caption>Earth observation formats</caption>
+ *   <tr>
+ *     <th>Format</th>
+ *     <th>Provider</th>
+ *     <th>Apache SIS notes</th>
+ *   </tr><tr>
+ *     <td>Landsat 8 level 1</td>
+ *     <td>U.S. Geological Survey (USGS)</td>
+ *     <td><a href="doc-files/LandsatMetadata.html">Mapping from/to ISO 19115</a></td>
+ *   </tr>
+ * </table>
+ *
+ * @author  Thi Phuong Hao Nguyen (VNSC)
+ * @author  Minh Chinh Vu (VNSC)
+ * @since   0.8
+ * @version 0.8
+ * @module
+ */
+package org.apache.sis.storage.earthobservation;

Propchange: sis/branches/JDK8/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/package-info.java
------------------------------------------------------------------------------
    svn:eol-style = native

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



Mime
View raw message