You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2013/06/10 17:53:43 UTC

svn commit: r1491512 - in /sis/trunk: ./ application/ application/sis-app/ application/sis-app/src/main/java/org/apache/sis/console/ application/sis-app/src/main/resources/ application/sis-app/src/test/ core/sis-build-helper/ core/sis-build-helper/src/...

Author: desruisseaux
Date: Mon Jun 10 15:53:42 2013
New Revision: 1491512

URL: http://svn.apache.org/r1491512
Log:
Merge from the JDK6 branch.

Added:
    sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/AboutSC.java
      - copied unchanged from r1491506, sis/branches/JDK6/application/sis-app/src/main/java/org/apache/sis/console/AboutSC.java
    sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/HelpCS.java
      - copied unchanged from r1491506, sis/branches/JDK6/application/sis-app/src/main/java/org/apache/sis/console/HelpCS.java
    sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/InvalidCommandException.java
      - copied unchanged from r1491506, sis/branches/JDK6/application/sis-app/src/main/java/org/apache/sis/console/InvalidCommandException.java
    sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/InvalidOptionException.java
      - copied unchanged from r1491506, sis/branches/JDK6/application/sis-app/src/main/java/org/apache/sis/console/InvalidOptionException.java
    sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/Option.java
      - copied unchanged from r1491506, sis/branches/JDK6/application/sis-app/src/main/java/org/apache/sis/console/Option.java
    sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/SubCommand.java
      - copied unchanged from r1491506, sis/branches/JDK6/application/sis-app/src/main/java/org/apache/sis/console/SubCommand.java
    sis/trunk/application/sis-app/src/main/resources/
      - copied from r1491506, sis/branches/JDK6/application/sis-app/src/main/resources/
    sis/trunk/application/sis-app/src/test/
      - copied from r1491506, sis/branches/JDK6/application/sis-app/src/test/
    sis/trunk/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/BundleCreator.java
      - copied unchanged from r1491506, sis/branches/JDK6/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/BundleCreator.java
    sis/trunk/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/PackInput.java
      - copied unchanged from r1491506, sis/branches/JDK6/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/PackInput.java
    sis/trunk/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/PackOutput.java
      - copied unchanged from r1491506, sis/branches/JDK6/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/PackOutput.java
    sis/trunk/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/Packer.java
      - copied unchanged from r1491506, sis/branches/JDK6/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/Packer.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/setup/About.java
      - copied unchanged from r1491506, sis/branches/JDK6/core/sis-utility/src/main/java/org/apache/sis/setup/About.java
    sis/trunk/ide-project/resources-links/
      - copied from r1491506, sis/branches/JDK6/ide-project/resources-links/
Removed:
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/About.java
Modified:
    sis/trunk/   (props changed)
    sis/trunk/application/pom.xml
    sis/trunk/application/sis-app/pom.xml
    sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/Command.java
    sis/trunk/core/sis-build-helper/pom.xml
    sis/trunk/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/JarCollector.java
    sis/trunk/core/sis-build-helper/src/site/apt/index.apt
    sis/trunk/core/sis-metadata/pom.xml
    sis/trunk/core/sis-referencing/pom.xml
    sis/trunk/core/sis-utility/pom.xml
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/util/Supervisor.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
    sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
    sis/trunk/core/sis-utility/src/test/java/org/apache/sis/test/TestUtilities.java
    sis/trunk/ide-project/NetBeans/build.xml
    sis/trunk/ide-project/NetBeans/nbproject/build-impl.xml
    sis/trunk/ide-project/NetBeans/nbproject/genfiles.properties
    sis/trunk/ide-project/NetBeans/nbproject/project.properties
    sis/trunk/ide-project/NetBeans/nbproject/project.xml
    sis/trunk/pom.xml
    sis/trunk/storage/pom.xml
    sis/trunk/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java
    sis/trunk/storage/sis-storage/pom.xml
    sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/index/GeoHashCoder.java

Propchange: sis/trunk/
------------------------------------------------------------------------------
  Merged /sis/branches/JDK7:r1491236-1491498
  Merged /sis/branches/JDK6:r1491237-1491506

Modified: sis/trunk/application/pom.xml
URL: http://svn.apache.org/viewvc/sis/trunk/application/pom.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/application/pom.xml (original)
+++ sis/trunk/application/pom.xml Mon Jun 10 15:53:42 2013
@@ -63,6 +63,29 @@
 
 
   <!-- ===========================================================
+           Build configuration
+       =========================================================== -->
+  <build>
+    <plugins>
+
+      <!-- Collect JAR files in <root>/target/binaries directory. -->
+      <plugin>
+        <groupId>org.apache.sis</groupId>
+        <artifactId>sis-build-helper</artifactId>
+        <version>${sis.plugin.version}</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>collect-jars</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+
+  <!-- ===========================================================
            Sub-modules included in the build in dependency order
        =========================================================== -->
   <modules>

Modified: sis/trunk/application/sis-app/pom.xml
URL: http://svn.apache.org/viewvc/sis/trunk/application/sis-app/pom.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/application/sis-app/pom.xml (original)
+++ sis/trunk/application/sis-app/pom.xml Mon Jun 10 15:53:42 2013
@@ -31,13 +31,70 @@
     <version>0.3-geoapi3.0-SNAPSHOT</version>
   </parent>
 
+
+  <!-- ===========================================================
+           Module Description
+       =========================================================== -->
   <artifactId>sis-app</artifactId>
   <packaging>bundle</packaging>
-  <name>Apache SIS app</name>
-  <url>http://sis.apache.org</url>
+  <name>Apache SIS application</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. -->
+Console application.
+  </description>
+
+
+  <!-- ===========================================================
+           Developers and Contributors
+       =========================================================== -->
+  <developers>
+    <developer>
+      <name>Martin Desruisseaux</name>
+      <id>desruisseaux</id>
+      <email>desruisseaux@apache.org</email>
+      <organization>Geomatys</organization>
+      <organizationUrl>http://www.geomatys.com</organizationUrl>
+      <timezone>+1</timezone>
+      <roles>
+        <role>developer</role>
+      </roles>
+    </developer>
+  </developers>
+
+
+  <!-- ===========================================================
+           Dependencies
+       =========================================================== -->
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.sis.storage</groupId>
+      <artifactId>sis-storage</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+
 
+  <!-- ===========================================================
+           Build configuration
+       =========================================================== -->
   <build>
     <plugins>
+
+      <!-- Declare the main class -->
+      <plugin>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            <manifest>
+              <mainClass>org.apache.sis.console.Command</mainClass>
+            </manifest>
+          </archive>
+          <skipIfEmpty>true</skipIfEmpty>
+        </configuration>
+      </plugin>
+
+      <!-- Package as OSGi bundle -->
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
@@ -46,7 +103,7 @@
             <Export-Package>
               org.apache.sis.cli
             </Export-Package>
-            <Main-Class>org.apache.sis.cli.SISCLI</Main-Class>
+            <Main-Class>org.apache.sis.console.Command</Main-Class>
           </instructions>
         </configuration>
       </plugin>

Modified: sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/Command.java
URL: http://svn.apache.org/viewvc/sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/Command.java?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/Command.java [UTF-8] (original)
+++ sis/trunk/application/sis-app/src/main/java/org/apache/sis/console/Command.java [UTF-8] Mon Jun 10 15:53:42 2013
@@ -16,13 +16,132 @@
  */
 package org.apache.sis.console;
 
+import java.util.Locale;
+import java.io.Console;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import org.apache.sis.util.resources.Errors;
+
+
 /**
- * Command line interface for Apache SIS
+ * Command line interface for Apache SIS.
+ * The main method can be invoked from the command-line as below
+ * (the filename needs to be completed with the actual version number):
+ *
+ * {@preformat java
+ *     java -jar target/binaries/sis-app.jar
+ * }
+ *
+ * "{@code target/binaries}" is the default location where SIS JAR files are grouped together
+ * with their dependencies after a Maven build. This directory can be replaced by any path to
+ * a directory providing the required dependencies.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @since   0.3
+ * @version 0.3
+ * @module
  */
-public class Command {
+public class Command implements Runnable {
+    /**
+     * The code given to {@link System#exit(int)} when the program failed because of a unknown sub-command.
+     */
+    public static final int INVALID_COMMAND_EXIT_CODE = 1;
+
+    /**
+     * The code given to {@link System#exit(int)} when the program failed because of an illegal user argument.
+     */
+    public static final int INVALID_OPTION_EXIT_CODE = 2;
+
+    /**
+     * The code given to {@link System#exit(int)} when a file given in argument uses an unknown file format.
+     */
+    public static final int UNKNOWN_STORAGE_EXIT_CODE = 10;
+
+    /**
+     * The code given to {@link System#exit(int)} when the program failed because of an {@link java.io.IOException}.
+     */
+    public static final int IO_EXCEPTION_EXIT_CODE = 100;
+
+    /**
+     * The code given to {@link System#exit(int)} when the program failed because of an {@link java.sql.SQLException}.
+     */
+    public static final int SQL_EXCEPTION_EXIT_CODE = 101;
+
+    /**
+     * The sub-command to execute.
+     */
+    private final SubCommand command;
+
+    /**
+     * Creates a new command for the given arguments. The first value in the given array shall be the
+     * command name. All other values are options.
+     *
+     * @param  args The command-line arguments.
+     * @throws InvalidCommandException If an invalid command has been given.
+     * @throws InvalidOptionException If the given arguments contain an invalid option.
+     */
+    protected Command(final String[] args) throws InvalidCommandException, InvalidOptionException {
+        if (args.length == 0) {
+            command = new HelpCS(args);
+        } else {
+            final String name = args[0];
+            /*switch (name.toLowerCase(Locale.US))*/ {
+                if (name.equalsIgnoreCase("about")) {
+                    command = new AboutSC(args);
+                }
+                else if (name.equalsIgnoreCase("help")) {
+                    command = new HelpCS(args);
+                }
+                else {
+                    throw new InvalidCommandException(Errors.format(Errors.Keys.UnknownCommand_1, name), name);
+                }
+            }
+        }
+    }
+
+    /**
+     * Runs the command.
+     */
+    @Override
+    public void run() {
+        command.run();
+    }
+
+    /**
+     * Prints the message of the given exception. This method is invoked only when the error occurred before
+     * the {@link SubCommand} has been built, otherwise the {@link SubCommand#err} printer shall be used.
+     */
+    private static void error(final Exception e) {
+        final Console console = System.console();
+        if (console != null) {
+            final PrintWriter err = console.writer();
+            err.println(e.getLocalizedMessage());
+            err.flush();
+        } else {
+            final PrintStream err = System.err;
+            err.println(e.getLocalizedMessage());
+            err.flush();
+        }
+    }
+
     /**
-     * Main method
+     * Prints the information to the standard output stream.
+     *
+     * @param args Command-line options.
      */
-    public static void main(String[] args) {
+    public static void main(final String[] args) {
+        final Command c;
+        try {
+            c = new Command(args);
+        } catch (InvalidCommandException e) {
+            error(e);
+            System.exit(INVALID_COMMAND_EXIT_CODE);
+            return;
+        } catch (InvalidOptionException e) {
+            error(e);
+            System.exit(INVALID_OPTION_EXIT_CODE);
+            return;
+        }
+        c.run();
     }
-}
\ No newline at end of file
+}

Modified: sis/trunk/core/sis-build-helper/pom.xml
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-build-helper/pom.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-build-helper/pom.xml (original)
+++ sis/trunk/core/sis-build-helper/pom.xml Mon Jun 10 15:53:42 2013
@@ -113,7 +113,7 @@ Define Maven Mojos and Javadoc taglets f
          This copy will not be needed anymore if http://jira.codehaus.org/browse/MNG-3328
          get fixed. -->
     <profile>
-      <id>jdk7-tools.jar</id>
+      <id>jdk6-tools.jar</id>
       <activation>
         <property>
           <name>java.vendor</name>

Modified: sis/trunk/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/JarCollector.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/JarCollector.java?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/JarCollector.java [UTF-8] (original)
+++ sis/trunk/core/sis-build-helper/src/main/java/org/apache/sis/internal/maven/JarCollector.java [UTF-8] Mon Jun 10 15:53:42 2013
@@ -18,10 +18,15 @@ package org.apache.sis.internal.maven;
 
 import java.io.File;
 import java.io.FileFilter;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.util.Set;
+import java.util.LinkedHashSet;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.project.MavenProject;
@@ -29,8 +34,10 @@ import org.apache.maven.artifact.Artifac
 
 
 /**
- * Copies <code>.jar</code> files in a single "{@code target/binaries}" directory.
- * Dependencies are copied as well, except if already presents.
+ * Collects <code>.jar</code> files in a single "{@code target/binaries}" directory.
+ * Dependencies are collected as well, except if already presents. This mojo uses hard links
+ * on platforms that support them. If hard links are not supported, then this mojo will instead
+ * creates a "{@code target/binaries/content.txt}" file listing the dependencies.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.3 (derived from geotk-2.2)
@@ -43,11 +50,22 @@ import org.apache.maven.artifact.Artifac
  */
 public final class JarCollector extends AbstractMojo implements FileFilter {
     /**
+     * The target directory.
+     */
+    static final String TARGET_DIRECTORY = "target";
+
+    /**
      * The sub directory to create inside the "target" directory.
      */
     static final String SUB_DIRECTORY = "binaries";
 
     /**
+     * The name of the file where to list SIS JAR files and their dependencies
+     * on platforms that do not support hard links.
+     */
+    static final String CONTENT_FILE = "content.txt";
+
+    /**
      * The Maven project running this plugin.
      *
      * @parameter property="project"
@@ -56,13 +74,13 @@ public final class JarCollector extends 
     private MavenProject project;
 
     /**
-     * The target directory (without the "<code>binaries</code>" sub-directory) where JARs are
-     * to be copied. It should be the "target" directory of the parent <code>pom.xml</code>.
+     * The root directory (without the "<code>target/binaries</code>" sub-directory) where JARs
+     * are to be copied. It should be the directory of the root <code>pom.xml</code>.
      *
-     * @parameter property="project.parent.build.directory"
+     * @parameter property="session.executionRootDirectory"
      * @required
      */
-    private String collectDirectory;
+    private String rootDirectory;
 
     /**
      * Copies the {@code *.jar} files to the collect directory.
@@ -71,8 +89,8 @@ public final class JarCollector extends 
      */
     @Override
     public void execute() throws MojoExecutionException {
-        if (collectDirectory == null || collectDirectory.startsWith("${")) {
-            getLog().warn("Unresolved directory: " + collectDirectory);
+        if (rootDirectory == null || rootDirectory.startsWith("${")) {
+            getLog().warn("Unresolved directory: " + rootDirectory);
             return;
         }
         /*
@@ -100,7 +118,7 @@ public final class JarCollector extends 
         /*
          * Get the "target" directory of the parent pom.xml and make sure it exists.
          */
-        File collect = new File(collectDirectory);
+        File collect = new File(rootDirectory, TARGET_DIRECTORY);
         if (!collect.exists()) {
             if (!collect.mkdir()) {
                 throw new MojoExecutionException("Failed to create target directory.");
@@ -127,7 +145,7 @@ public final class JarCollector extends 
         }
         File copy = new File(collect, jarFile.getName());
         copy.delete();
-        copyFileToDirectory(jarFile, copy);
+        linkFileToDirectory(jarFile, copy);
         /*
          * Copies the dependencies.
          */
@@ -148,7 +166,7 @@ public final class JarCollector extends 
                              * the module's JAR was copied unconditionally above (because it may
                              * be the result of a new compilation).
                              */
-                            copyFileToDirectory(file, copy);
+                            linkFileToDirectory(file, copy);
                         }
                     }
                 }
@@ -212,20 +230,55 @@ public final class JarCollector extends 
     }
 
     /**
-     * Copies the given file to the given target file.
+     * Creates a link from the given source file to the given target file.
+     * On JDK6 or on platform that do not support links, this method rather
+     * updates the <code>content.txt</code> file.
      *
      * @param file The source file to read.
      * @param copy The destination file to create.
      */
-    private static void copyFileToDirectory(final File file, final File copy) throws IOException {
-        final FileInputStream in = new FileInputStream(file);
-        final FileOutputStream out = new FileOutputStream(copy);
-        final byte[] buffer = new byte[4096];
-        int c;
-        while ((c = in.read(buffer)) >= 0) {
-            out.write(buffer, 0, c);
+    private static void linkFileToDirectory(final File file, final File copy) throws IOException {
+        /*
+         * If we can not use hard links, creates or updates a "target/content.txt" file instead.
+         * This file will contains the list of all dependencies, without duplicated values.
+         */
+        final File dependenciesFile = new File(copy.getParentFile(), CONTENT_FILE);
+        final Set<String> dependencies = loadDependencyList(dependenciesFile);
+        if (dependencies.add(file.getPath())) {
+            // Save the dependencies list only if it has been modified.
+            final BufferedWriter out = new BufferedWriter(new FileWriter(dependenciesFile));
+            try {
+                for (final String dependency : dependencies) {
+                    out.write(dependency);
+                    out.newLine();
+                }
+            } finally {
+                out.close();
+            }
+        }
+    }
+
+    /**
+     * Loads the {@value #CONTENT_FILE} from the given directory, if it exists.
+     * Otherwise returns an empty but modifiable set. This method is invoked only on
+     * platforms that do not support hard links.
+     */
+    static Set<String> loadDependencyList(final File dependenciesFile) throws IOException {
+        final Set<String> dependencies = new LinkedHashSet<String>();
+        if (dependenciesFile.exists()) {
+            final BufferedReader in = new BufferedReader(new FileReader(dependenciesFile));
+            try {
+                String line;
+                while ((line = in.readLine()) != null) {
+                    line = line.trim();
+                    if (!line.isEmpty()) {
+                        dependencies.add(line);
+                    }
+                }
+            } finally {
+                in.close();
+            }
         }
-        out.close();
-        in.close();
+        return dependencies;
     }
 }

Modified: sis/trunk/core/sis-build-helper/src/site/apt/index.apt
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-build-helper/src/site/apt/index.apt?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-build-helper/src/site/apt/index.apt [UTF-8] (original)
+++ sis/trunk/core/sis-build-helper/src/site/apt/index.apt [UTF-8] Mon Jun 10 15:53:42 2013
@@ -16,6 +16,8 @@ Building Apache SIS
 
   * JAR files collector
 
+  * Pack200 bundles
+
 
 * Javadoc taglets
 
@@ -87,9 +89,9 @@ Building Apache SIS
   in the module containing the resources to recompile. This is sometime useful for regenerating
   the constants in the <<<Keys>>> inner class in a feaster way than building the project.
 
-+-----------------------------------------------------
-mvn org.apache.sis:sis-build-helper:compile-resources
-+-----------------------------------------------------
+-----------------------------------------------------------
+   mvn org.apache.sis:sis-build-helper:compile-resources
+-----------------------------------------------------------
 
 
 * JAR files collector
@@ -127,3 +129,21 @@ mvn org.apache.sis:sis-build-helper:comp
     </plugins>
   </build>
 +-----------------------------------------------------
+
+
+* Pack200 bundles
+
+  To merges the binaries produced by the above step and compress them using Pack200,
+  invoke the following from the command line. Do not forget the <<<--non-recursive>>>
+  option, otherwise the Mojo will waste CPU by executing itself many time.
+
+----------------------------------------------------------------
+   mvn org.apache.sis:sis-build-helper:pack --non-recursive
+----------------------------------------------------------------
+
+  The above command should create a <<<target/binaries/sis-\<version\>.pack.gz>>> file.
+  To uncompress that file, use the following command:
+
+----------------------------------------------------------------
+   unpack200 --remove-pack-file sis-<version>.pack.gz sis.jar
+----------------------------------------------------------------

Modified: sis/trunk/core/sis-metadata/pom.xml
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/pom.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/pom.xml (original)
+++ sis/trunk/core/sis-metadata/pom.xml Mon Jun 10 15:53:42 2013
@@ -103,6 +103,29 @@ Implementations of metadata derived from
 
 
   <!-- ===========================================================
+           Build configuration
+       =========================================================== -->
+  <build>
+    <plugins>
+
+      <!-- Collect JAR files in <root>/target/binaries directory. -->
+      <plugin>
+        <groupId>org.apache.sis</groupId>
+        <artifactId>sis-build-helper</artifactId>
+        <version>${sis.plugin.version}</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>collect-jars</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+
+  <!-- ===========================================================
            Dependencies
        =========================================================== -->
   <dependencies>

Modified: sis/trunk/core/sis-referencing/pom.xml
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-referencing/pom.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-referencing/pom.xml (original)
+++ sis/trunk/core/sis-referencing/pom.xml Mon Jun 10 15:53:42 2013
@@ -34,7 +34,65 @@
   <artifactId>sis-referencing</artifactId>
   <packaging>bundle</packaging>
   <name>Apache SIS referencing</name>
-  <url>http://sis.apache.org</url>
+  <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. -->
+Implementations of Coordinate Reference Systems (CRS),
+ conversion and transformation services derived from ISO 19111.
+  </description>
+
+
+  <!-- ===========================================================
+           Developers and Contributors
+       =========================================================== -->
+  <developers>
+    <developer>
+      <name>Chris A. Mattmann</name>
+      <id>mattmann</id>
+      <email>mattmann@apache.org</email>
+      <url>http://sunset.usc.edu/~mattmann/</url>
+      <organization>NASA Jet Propulsion Laboratory</organization>
+      <organizationUrl>http://www.jpl.nasa.gov</organizationUrl>
+      <timezone>-8</timezone>
+      <roles>
+        <role>committer</role>
+      </roles>
+    </developer>
+    <developer>
+      <name>Martin Desruisseaux</name>
+      <id>desruisseaux</id>
+      <email>desruisseaux@apache.org</email>
+      <organization>Geomatys</organization>
+      <organizationUrl>http://www.geomatys.com</organizationUrl>
+      <timezone>+1</timezone>
+      <roles>
+        <role>developer</role>
+      </roles>
+    </developer>
+  </developers>
+
+
+  <!-- ===========================================================
+           Build configuration
+       =========================================================== -->
+  <build>
+    <plugins>
+
+      <!-- Collect JAR files in <root>/target/binaries directory. -->
+      <plugin>
+        <groupId>org.apache.sis</groupId>
+        <artifactId>sis-build-helper</artifactId>
+        <version>${sis.plugin.version}</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>collect-jars</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
 
 
   <!-- ===========================================================

Modified: sis/trunk/core/sis-utility/pom.xml
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/pom.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/pom.xml (original)
+++ sis/trunk/core/sis-utility/pom.xml Mon Jun 10 15:53:42 2013
@@ -132,7 +132,7 @@ Miscellaneous utilities.
         </executions>
       </plugin>
 
-      <!-- Compile properties files into resources UTF files. -->
+      <!-- Compile properties files into resources UTF files and collect JAR files. -->
       <plugin>
         <groupId>org.apache.sis</groupId>
         <artifactId>sis-build-helper</artifactId>
@@ -141,8 +141,7 @@ Miscellaneous utilities.
           <execution>
             <goals>
               <goal>compile-resources</goal>
-              <!-- The "collect-jars" goal declared in the JDK7 branch is omitted
-                   in the JDK6 branch, because much more costly on JDK6 platforms. -->
+              <goal>collect-jars</goal>
             </goals>
           </execution>
         </executions>

Modified: sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/util/Supervisor.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/util/Supervisor.java?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/util/Supervisor.java [UTF-8] (original)
+++ sis/trunk/core/sis-utility/src/main/java/org/apache/sis/internal/util/Supervisor.java [UTF-8] Mon Jun 10 15:53:42 2013
@@ -32,7 +32,7 @@ import javax.management.JMException;
 import javax.management.NotCompliantMBeanException;
 import java.lang.management.ManagementFactory;
 
-import org.apache.sis.util.About;
+import org.apache.sis.setup.About;
 import org.apache.sis.util.Localized;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.logging.Logging;

Modified: sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java [UTF-8] (original)
+++ sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java [UTF-8] Mon Jun 10 15:53:42 2013
@@ -124,6 +124,11 @@ public final class Errors extends Indexe
         public static final int DuplicatedIdentifier_1 = 38;
 
         /**
+         * Option “{0}” is duplicated.
+         */
+        public static final int DuplicatedOption_1 = 100;
+
+        /**
          * Element “{0}” is already present.
          */
         public static final int ElementAlreadyPresent_1 = 36;
@@ -211,6 +216,11 @@ public final class Errors extends Indexe
         public static final int IllegalLanguageCode_1 = 12;
 
         /**
+         * Option ‘{0}’ can not take the “{1}” value.
+         */
+        public static final int IllegalOptionValue_2 = 101;
+
+        /**
          * The [{0} … {1}] range of ordinate values is not valid for the “{2}” axis.
          */
         public static final int IllegalOrdinateRange_3 = 5;
@@ -296,6 +306,11 @@ public final class Errors extends Indexe
         public static final int MissingRequiredModule_1 = 84;
 
         /**
+         * Missing value for option “{0}”.
+         */
+        public static final int MissingValueForOption_1 = 99;
+
+        /**
          * Missing value for property “{0}”.
          */
         public static final int MissingValueForProperty_1 = 85;
@@ -471,6 +486,16 @@ public final class Errors extends Indexe
         public static final int UnexpectedFileFormat_2 = 92;
 
         /**
+         * Command “{0}” is not recognized.
+         */
+        public static final int UnknownCommand_1 = 102;
+
+        /**
+         * Option “{0}” is not recognized.
+         */
+        public static final int UnknownOption_1 = 98;
+
+        /**
          * Type of the “{0}” property is unknown.
          */
         public static final int UnknownTypeForProperty_1 = 80;

Modified: sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties [ISO-8859-1] (original)
+++ sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties [ISO-8859-1] Mon Jun 10 15:53:42 2013
@@ -35,6 +35,7 @@ CanNotSetPropertyValue_1        = Can no
 ClassNotFinal_1                 = Class \u2018{0}\u2019 is not final.
 CloneNotSupported_1             = Can not clone an object of type \u2018{0}\u2019.
 DeadThread_1                    = Thread \u201c{0}\u201d is dead.
+DuplicatedOption_1              = Option \u201c{0}\u201d is duplicated.
 DuplicatedIdentifier_1          = Identifier \u201c{0}\u201d is duplicated.
 ElementAlreadyPresent_1         = Element \u201c{0}\u201d is already present.
 EmptyArgument_1                 = Argument \u2018{0}\u2019 shall not be empty.
@@ -48,6 +49,7 @@ IllegalArgumentClass_2          = Argume
 IllegalArgumentClass_3          = Argument \u2018{0}\u2019 can not be an instance of \u2018{2}\u2019. Expected an instance of \u2018{1}\u2019 or derived type.
 IllegalArgumentField_4          = Argument \u2018{0}\u2019 can not take the \u201c{1}\u201d value, because the \u2018{2}\u2019 field can not take the \u201c{3}\u201d value.
 IllegalArgumentValue_2          = Argument \u2018{0}\u2019 can not take the \u201c{1}\u201d value.
+IllegalOptionValue_2            = Option \u2018{0}\u2019 can not take the \u201c{1}\u201d value.
 IllegalBitsPattern_1            = Illegal bits pattern: {0}.
 IllegalClass_2                  = Class \u2018{1}\u2019 is illegal. It must be \u2018{0}\u2019 or a derived class.
 IllegalFormatPatternForClass_2  = The \u201c{1}\u201d pattern can not be applied to formating of objects of type \u2018{0}\u2019.
@@ -69,9 +71,10 @@ MandatoryAttribute_2            = Attrib
 MismatchedCRS                   = The coordinate reference system must be the same for all objects.
 MismatchedDimension_2           = Mismatched object dimension: {0}D and {1}D.
 MismatchedDimension_3           = Argument \u2018{0}\u2019 has {2} dimension{2,choice,1#|2#s}, while {1} was expected.
-MissingValueInColumn_1          = Missing value in the \u201c{0}\u201d column.
 MissingRequiredModule_1         = This operation requires the \u201c{0}\u201d module.
+MissingValueForOption_1         = Missing value for option \u201c{0}\u201d.
 MissingValueForProperty_1       = Missing value for property \u201c{0}\u201d.
+MissingValueInColumn_1          = Missing value in the \u201c{0}\u201d column.
 NegativeArgument_2              = Argument \u2018{0}\u2019 shall not be negative. The given value was {1}.
 NegativeArrayLength_1           = Can not create a \u201c{0}\u201d array of negative length.
 NodeChildOfItself_1             = Node \u201c{0}\u201d can not be a child of itself.
@@ -106,6 +109,8 @@ UnexpectedChange_1              = Unexpe
 UnexpectedEndOfFile_1           = Unexpected end of file while reading \u201c{0}\u201d.
 UnexpectedEndOfString_1         = More characters were expected at the end of \u201c{0}\u201d.
 UnexpectedFileFormat_2          = File \u201c{1}\u201d seems to be encoded in an other format than {0}.
+UnknownCommand_1                = Command \u201c{0}\u201d is not recognized.
+UnknownOption_1                 = Option \u201c{0}\u201d is not recognized.
 UnknownType_1                   = Type \u2018{0}\u2019 is unknown in this context.
 UnknownTypeForProperty_1        = Type of the \u201c{0}\u201d property is unknown.
 UnmodifiableAffineTransform     = This affine transform is unmodifiable.

Modified: sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties [ISO-8859-1] (original)
+++ sis/trunk/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties [ISO-8859-1] Mon Jun 10 15:53:42 2013
@@ -25,6 +25,7 @@ CanNotSetPropertyValue_1        = Ne peu
 ClassNotFinal_1                 = La classe \u2018{0}\u2019 n\u2019est pas finale.
 CloneNotSupported_1             = Un objet de type \u2018{0}\u2019 ne peut pas \u00eatre clon\u00e9.
 DeadThread_1                    = La t\u00e2che \u201c{0}\u201d est morte.
+DuplicatedOption_1              = L\u2019option \u201c{0}\u201d est dupliqu\u00e9e.
 DuplicatedIdentifier_1          = L\u2019identifiant \u201c{0}\u201d est dupliqu\u00e9.
 ElementAlreadyPresent_1         = L\u2019\u00e9lement \u201c{0}\u201d est d\u00e9j\u00e0 pr\u00e9sent.
 EmptyArgument_1                 = L\u2019argument \u2018{0}\u2019 ne doit pas \u00eatre vide.
@@ -38,6 +39,7 @@ IllegalArgumentClass_2          = L\u201
 IllegalArgumentClass_3          = L\u2019argument \u2018{0}\u2019 ne peut pas \u00eatre de type \u2018{2}\u2019. Une instance de \u2018{1}\u2019 ou d\u2019un type d\u00e9riv\u00e9 \u00e9tait attendue.
 IllegalArgumentField_4          = L\u2019argument \u2018{0}\u2019 n\u2019accepte pas la valeur \u201c{1}\u201d parce que le champs \u2018{2}\u2019 ne peut pas prendre la valeur \u201c{3}\u201d.
 IllegalArgumentValue_2          = L\u2019argument \u2018{0}\u2019 n\u2019accepte pas la valeur \u201c{1}\u201d.
+IllegalOptionValue_2            = L\u2019option \u2018{0}\u2019 n\u2019accepte pas la valeur \u201c{1}\u201d.
 IllegalBitsPattern_1            = Pattern de bits invalide: {0}.
 IllegalClass_2                  = La classe \u2018{1}\u2019 est ill\u00e9gale. Il doit s\u2019agir d\u2019une classe \u2018{0}\u2019 ou d\u00e9riv\u00e9e.
 IllegalFormatPatternForClass_2  = Le mod\u00e8le \u201c{1}\u201d ne peut pas \u00eatre appliqu\u00e9 au formatage d\u2019objets de type \u2018{0}\u2019.
@@ -60,6 +62,7 @@ MismatchedCRS                   = Le sys
 MismatchedDimension_2           = Les dimensions des objets ({0}D et {1}D) ne concordent pas.
 MismatchedDimension_3           = L\u2019argument \u2018{0}\u2019 a {2} dimension{2,choice,1#|2#s}, alors qu\u2019on en attendait {1}.
 MissingRequiredModule_1         = Cette op\u00e9ration requiert le module \u201c{0}\u201d.
+MissingValueForOption_1         = Aucune valeur n\u2019a \u00e9t\u00e9 d\u00e9finie pour l\u2019option \u201c{0}\u201d.
 MissingValueForProperty_1       = Aucune valeur n\u2019a \u00e9t\u00e9 d\u00e9finie pour la propri\u00e9t\u00e9 \u201c{0}\u201d.
 MissingValueInColumn_1          = Il manque une valeur dans la colonne \u201c{0}\u201d.
 NegativeArgument_2              = L\u2019argument \u2018{0}\u2019 ne doit pas \u00eatre n\u00e9gatif. La valeur donn\u00e9e \u00e9tait {1}.
@@ -95,6 +98,8 @@ UnexpectedChange_1              = Change
 UnexpectedEndOfFile_1           = Fin de fichier inattendue lors de la lecture de \u201c{0}\u201d.
 UnexpectedEndOfString_1         = D\u2019autres caract\u00e8res \u00e9taient attendus \u00e0 la fin du texte \u201c{0}\u201d.
 UnexpectedFileFormat_2          = Le fichier \u201c{1}\u201d semble \u00eatre encod\u00e9 dans un autre format que {0}.
+UnknownCommand_1                = La commande \u201c{0}\u201d n\u2019est pas reconnue.
+UnknownOption_1                 = L\u2019option \u201c{0}\u201d n\u2019est pas reconnue.
 UnknownType_1                   = Le type \u2018{0}\u2019 n\u2019est pas reconnu dans ce contexte.
 UnknownTypeForProperty_1        = Le type de la propri\u00e9t\u00e9 \u201c{0}\u201d est inconnu.
 UnmodifiableAffineTransform     = Cette transformation affine n\u2019est pas modifiable.

Modified: sis/trunk/core/sis-utility/src/test/java/org/apache/sis/test/TestUtilities.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/test/java/org/apache/sis/test/TestUtilities.java?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/test/java/org/apache/sis/test/TestUtilities.java [UTF-8] (original)
+++ sis/trunk/core/sis-utility/src/test/java/org/apache/sis/test/TestUtilities.java [UTF-8] Mon Jun 10 15:53:42 2013
@@ -231,7 +231,7 @@ public final strictfp class TestUtilitie
      * Returns the tree structure of the given string representation, without the localized text.
      * For example given the following string:
      *
-     * {@preformat
+     * {@preformat text
      *   Citation
      *     ├─Title…………………………………………………… Some title
      *     └─Cited responsible party
@@ -240,7 +240,7 @@ public final strictfp class TestUtilitie
      *
      * this method returns an array containing the following elements:
      *
-     * {@preformat
+     * {@preformat text
      *   "",
      *   "  ├─",
      *   "  └─",

Modified: sis/trunk/ide-project/NetBeans/build.xml
URL: http://svn.apache.org/viewvc/sis/trunk/ide-project/NetBeans/build.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/ide-project/NetBeans/build.xml (original)
+++ sis/trunk/ide-project/NetBeans/build.xml Mon Jun 10 15:53:42 2013
@@ -27,7 +27,6 @@
     <copy todir="${build.classes.dir}">
       <fileset dir="${project.root}/core/sis-utility/src/main/resources">
         <include name="META-INF/services/*"/>
-        <include name="**/*.properties"/>
       </fileset>
     </copy>
   </target>

Modified: sis/trunk/ide-project/NetBeans/nbproject/build-impl.xml
URL: http://svn.apache.org/viewvc/sis/trunk/ide-project/NetBeans/nbproject/build-impl.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/ide-project/NetBeans/nbproject/build-impl.xml (original)
+++ sis/trunk/ide-project/NetBeans/nbproject/build-impl.xml Mon Jun 10 15:53:42 2013
@@ -135,6 +135,7 @@ is divided into following sections:
         </condition>
         <condition property="have.tests">
             <or>
+                <available file="${test.app.dir}"/>
                 <available file="${test.netcdf.dir}"/>
                 <available file="${test.storage.dir}"/>
                 <available file="${test.referencing.dir}"/>
@@ -152,6 +153,7 @@ is divided into following sections:
                 <available file="${src.referencing.dir}"/>
                 <available file="${src.metadata.dir}"/>
                 <available file="${src.utility.dir}"/>
+                <available file="${src.resources.dir}"/>
             </or>
         </condition>
         <condition property="netbeans.home+have.tests">
@@ -247,6 +249,8 @@ is divided into following sections:
         <fail unless="src.referencing.dir">Must set src.referencing.dir</fail>
         <fail unless="src.metadata.dir">Must set src.metadata.dir</fail>
         <fail unless="src.utility.dir">Must set src.utility.dir</fail>
+        <fail unless="src.resources.dir">Must set src.resources.dir</fail>
+        <fail unless="test.app.dir">Must set test.app.dir</fail>
         <fail unless="test.netcdf.dir">Must set test.netcdf.dir</fail>
         <fail unless="test.storage.dir">Must set test.storage.dir</fail>
         <fail unless="test.referencing.dir">Must set test.referencing.dir</fail>
@@ -272,7 +276,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.app.dir}:${src.netcdf.dir}:${src.storage.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}" name="srcdir"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.app.dir}:${src.netcdf.dir}:${src.storage.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.resources.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <attribute default="${javac.processorpath}" name="processorpath"/>
@@ -312,7 +316,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.app.dir}:${src.netcdf.dir}:${src.storage.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}" name="srcdir"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.app.dir}:${src.netcdf.dir}:${src.storage.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.resources.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <attribute default="${javac.processorpath}" name="processorpath"/>
@@ -344,7 +348,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.app.dir}:${src.netcdf.dir}:${src.storage.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}" name="srcdir"/>
+            <attribute default="${src.local-src.dir}:${src.webapp.dir}:${src.app.dir}:${src.netcdf.dir}:${src.storage.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.resources.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <sequential>
@@ -431,6 +435,9 @@ is divided into following sections:
                 <property name="junit.forkmode" value="perTest"/>
                 <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
                     <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.app.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
                         <fileset dir="${test.netcdf.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
                         </fileset>
@@ -475,6 +482,9 @@ is divided into following sections:
                     <isset property="test.method"/>
                 </condition>
                 <union id="test.set">
+                    <fileset dir="${test.app.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
                     <fileset dir="${test.netcdf.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
                         <filename name="@{testincludes}"/>
                     </fileset>
@@ -599,6 +609,9 @@ is divided into following sections:
                 <property name="junit.forkmode" value="perTest"/>
                 <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
                     <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.app.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
                         <fileset dir="${test.netcdf.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
                         </fileset>
@@ -978,7 +991,7 @@ is divided into following sections:
                 <include name="*"/>
             </dirset>
         </pathconvert>
-        <j2seproject3:depend srcdir="${src.local-src.dir}:${src.webapp.dir}:${src.app.dir}:${src.netcdf.dir}:${src.storage.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${build.generated.subdirs}"/>
+        <j2seproject3:depend srcdir="${src.local-src.dir}:${src.webapp.dir}:${src.app.dir}:${src.netcdf.dir}:${src.storage.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.resources.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}"/>
@@ -991,6 +1004,7 @@ is divided into following sections:
             <fileset dir="${src.referencing.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.metadata.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.utility.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+            <fileset dir="${src.resources.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
         </copy>
     </target>
     <target if="has.persistence.xml" name="-copy-persistence-xml">
@@ -1011,7 +1025,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.app.dir}:${src.netcdf.dir}:${src.storage.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}"/>
+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.local-src.dir}:${src.webapp.dir}:${src.app.dir}:${src.netcdf.dir}:${src.storage.dir}:${src.referencing.dir}:${src.metadata.dir}:${src.utility.dir}:${src.resources.dir}"/>
     </target>
     <target name="-post-compile-single">
         <!-- Empty placeholder for easier customization. -->
@@ -1296,6 +1310,9 @@ is divided into following sections:
             <fileset dir="${src.utility.dir}" excludes="*.java,${excludes}" includes="${includes}">
                 <filename name="**/*.java"/>
             </fileset>
+            <fileset dir="${src.resources.dir}" excludes="*.java,${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
             <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
                 <include name="**/*.java"/>
                 <exclude name="*.java"/>
@@ -1327,6 +1344,9 @@ is divided into following sections:
             <fileset dir="${src.utility.dir}" excludes="${excludes}" includes="${includes}">
                 <filename name="**/doc-files/**"/>
             </fileset>
+            <fileset dir="${src.resources.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
             <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
                 <include name="**/doc-files/**"/>
             </fileset>
@@ -1349,11 +1369,12 @@ 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.netcdf.dir}:${test.storage.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}"/>
+        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.app.dir}:${test.netcdf.dir}:${test.storage.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.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.netcdf.dir}:${test.storage.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.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.app.dir}:${test.netcdf.dir}:${test.storage.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}"/>
         <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.app.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.netcdf.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.storage.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.referencing.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
@@ -1373,8 +1394,9 @@ 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.netcdf.dir}:${test.storage.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}" srcdir="${test.netcdf.dir}:${test.storage.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.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.app.dir}:${test.netcdf.dir}:${test.storage.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}" srcdir="${test.app.dir}:${test.netcdf.dir}:${test.storage.dir}:${test.referencing.dir}:${test.metadata.dir}:${test.utility.dir}"/>
         <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.app.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.netcdf.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.storage.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${test.referencing.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>

Modified: sis/trunk/ide-project/NetBeans/nbproject/genfiles.properties
URL: http://svn.apache.org/viewvc/sis/trunk/ide-project/NetBeans/nbproject/genfiles.properties?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/ide-project/NetBeans/nbproject/genfiles.properties [ISO-8859-1] (original)
+++ sis/trunk/ide-project/NetBeans/nbproject/genfiles.properties [ISO-8859-1] Mon Jun 10 15:53:42 2013
@@ -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=8ee4ca76
-nbproject/build-impl.xml.script.CRC32=3ef3d339
+nbproject/build-impl.xml.data.CRC32=3d12ef07
+nbproject/build-impl.xml.script.CRC32=abdc264a
 nbproject/build-impl.xml.stylesheet.CRC32=c6d2a60f@1.56.1.46

Modified: sis/trunk/ide-project/NetBeans/nbproject/project.properties
URL: http://svn.apache.org/viewvc/sis/trunk/ide-project/NetBeans/nbproject/project.properties?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/ide-project/NetBeans/nbproject/project.properties [ISO-8859-1] (original)
+++ sis/trunk/ide-project/NetBeans/nbproject/project.properties [ISO-8859-1] Mon Jun 10 15:53:42 2013
@@ -26,8 +26,10 @@ junit.forkmode       = once
 #
 project.root         = ../..
 src.local-src.dir    = ../local-src
+src.resources.dir    = ../resources-links
 src.webapp.dir       = ${project.root}/application/sis-webapp/src/main/java
 src.app.dir          = ${project.root}/application/sis-app/src/main/java
+test.app.dir         = ${project.root}/application/sis-app/src/test/java
 src.netcdf.dir       = ${project.root}/storage/sis-netcdf/src/main/java
 test.netcdf.dir      = ${project.root}/storage/sis-netcdf/src/test/java
 src.storage.dir      = ${project.root}/storage/sis-storage/src/main/java

Modified: sis/trunk/ide-project/NetBeans/nbproject/project.xml
URL: http://svn.apache.org/viewvc/sis/trunk/ide-project/NetBeans/nbproject/project.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/ide-project/NetBeans/nbproject/project.xml (original)
+++ sis/trunk/ide-project/NetBeans/nbproject/project.xml Mon Jun 10 15:53:42 2013
@@ -13,13 +13,15 @@
                 <root id="src.referencing.dir" name="Referencing"/>
                 <root id="src.metadata.dir" name="Metadata"/>
                 <root id="src.utility.dir" name="Utility"/>
+                <root id="src.resources.dir" name="Resources"/>
             </source-roots>
             <test-roots>
-                <root id="test.netcdf.dir" name="NetCDF tests"/>
-                <root id="test.storage.dir" name="Storage tests"/>
-                <root id="test.referencing.dir" name="Referencing tests"/>
-                <root id="test.metadata.dir" name="Metadata tests"/>
-                <root id="test.utility.dir" name="Utility tests"/>
+                <root id="test.app.dir" name="Test Application"/>
+                <root id="test.netcdf.dir" name="Test NetCDF"/>
+                <root id="test.storage.dir" name="Test Storage"/>
+                <root id="test.referencing.dir" name="Test Referencing"/>
+                <root id="test.metadata.dir" name="Test Metadata"/>
+                <root id="test.utility.dir" name="Test Utility"/>
             </test-roots>
         </data>
         <spellchecker-wordlist xmlns="http://www.netbeans.org/ns/spellchecker-wordlist/1">

Modified: sis/trunk/pom.xml
URL: http://svn.apache.org/viewvc/sis/trunk/pom.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/pom.xml (original)
+++ sis/trunk/pom.xml Mon Jun 10 15:53:42 2013
@@ -433,7 +433,6 @@ Apache SIS is a free software, Java lang
             <index>false</index>
             <manifest>
               <addClasspath>true</addClasspath>
-              <mainClass>org.apache.sis.util.About</mainClass>
               <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
             </manifest>
             <manifestEntries>

Modified: sis/trunk/storage/pom.xml
URL: http://svn.apache.org/viewvc/sis/trunk/storage/pom.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/storage/pom.xml (original)
+++ sis/trunk/storage/pom.xml Mon Jun 10 15:53:42 2013
@@ -75,6 +75,29 @@
 
 
   <!-- ===========================================================
+           Build configuration
+       =========================================================== -->
+  <build>
+    <plugins>
+
+      <!-- Collect JAR files in <root>/target/binaries directory. -->
+      <plugin>
+        <groupId>org.apache.sis</groupId>
+        <artifactId>sis-build-helper</artifactId>
+        <version>${sis.plugin.version}</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>collect-jars</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+
+  <!-- ===========================================================
            Dependencies
        =========================================================== -->
   <dependencies>

Modified: sis/trunk/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java [UTF-8] (original)
+++ sis/trunk/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java [UTF-8] Mon Jun 10 15:53:42 2013
@@ -240,7 +240,6 @@ public class AttributeNames {
      *
      * @see #VOCABULARY
      * @see #STANDARD_NAME
-     * @see NetcdfMetadataReader#getKeywordSeparator(Group)
      * @see <a href="http://www.unidata.ucar.edu/software/netcdf-java/formats/DataDiscoveryAttConvention.html#keywords_Attribute">UCAR reference</a>
      */
     public static final String KEYWORDS = "keywords";

Modified: sis/trunk/storage/sis-storage/pom.xml
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/pom.xml?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/storage/sis-storage/pom.xml (original)
+++ sis/trunk/storage/sis-storage/pom.xml Mon Jun 10 15:53:42 2013
@@ -51,6 +51,18 @@ Provides the interfaces and base classes
        =========================================================== -->
   <developers>
     <developer>
+      <name>Chris A. Mattmann</name>
+      <id>mattmann</id>
+      <email>mattmann@apache.org</email>
+      <url>http://sunset.usc.edu/~mattmann/</url>
+      <organization>NASA Jet Propulsion Laboratory</organization>
+      <organizationUrl>http://www.jpl.nasa.gov</organizationUrl>
+      <timezone>-8</timezone>
+      <roles>
+        <role>committer</role>
+      </roles>
+    </developer>
+    <developer>
       <name>Martin Desruisseaux</name>
       <id>desruisseaux</id>
       <email>desruisseaux@apache.org</email>

Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/index/GeoHashCoder.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/index/GeoHashCoder.java?rev=1491512&r1=1491511&r2=1491512&view=diff
==============================================================================
--- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/index/GeoHashCoder.java [UTF-8] (original)
+++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/index/GeoHashCoder.java [UTF-8] Mon Jun 10 15:53:42 2013
@@ -150,7 +150,7 @@ public class GeoHashCoder implements Ser
     }
 
     /**
-     * Returns the length of geohashes strings to be encoded by the {@link #encode(double, double)} method.
+     * Returns the length of geohashes strings to be encoded by the {@link #encode(DirectPosition)} method.
      * The default value is 12.
      *
      * @return The length of geohashes strings.
@@ -160,7 +160,7 @@ public class GeoHashCoder implements Ser
     }
 
     /**
-     * Sets the length of geohashes strings to be encoded by the {@link #encode(double, double)} method.
+     * Sets the length of geohashes strings to be encoded by the {@link #encode(DirectPosition)} method.
      *
      * @param precision The new length of geohashes strings.
      */